У меня есть установка вложенного класса, как в приведенном ниже фрагменте кода.
class test:
class child:
some_variable = None
Когда я пытаюсь вызвать этот код из другого файла .py, как показано ниже
from testing import test
t = test()
t.child.some_variable = "123"
t = test()
print(t.child.some_variable)
Я получаю результат
123
Я ожидал получить None или, по крайней мере, сообщение об ошибке. Я попытался решить эту проблему с помощью следующего подхода, но проблема не устранена с тем же результатом.
class test:
def __init__(self):
self.child()
class child:
some_variable = None
def __init__(self):
self.some_variable = ""
Как я могу инициировать новый дочерний класс, когда я вызываю родительский класс?
@bphi, если он занимается метапрограммированием, это имеет смысл. Хотя, похоже, здесь дело обстоит не так.
Не имея его как внутренний класс, а как отдельный класс, а затем как мгновенный атрибут:
class child_class:
def __init__(self):
self.some_variable = None
class test:
def __init__(self):
self.child = child_class()
t = test()
t.child.some_variable = "123"
t = test()
print(t.child.some_variable) # prints None
Или, альтернативно, у вас может быть внутренний класс, но все же вам нужно создать атрибут экземпляра:
class test:
class child_class:
def __init__(self):
self.some_variable = None
def __init__(self):
self.child = self.child_class()
t = test()
t.child.some_variable = "123"
t = test()
print(t.child.some_variable) # also prints None
Хотел, чтобы каждый класс «владел» своими подклассами внутри себя. Но я полагаю, в зависимости от отзывов, учитывая, что это не оптимальное решение. Так что принял мой код для этого решения.
@RasmusEkman Вы также можете переместить класс внутри родительского класса и вызвать self.child = self.child_class()
. См. Редактировать.
Я не уверен, что вы здесь пытаетесь достичь, но классы внутри классов, как правило, плохая практика.