Создать статический атрибут класса (атрибут является экземпляром того же класса) - PullRequest
0 голосов
/ 27 ноября 2018

Допустим, у меня есть класс, определенный следующим образом:

class Foo():
   baz = None
   def __init__(self, bar):
       self.bar = bar

Теперь в этом примере Foo.baz равно None.Теперь предположим, что этот атрибут класса должен быть экземпляром Foo, как показано ниже:

class Foo():
    baz = Foo("baz")
    def __init__(self, bar):
        self.bar = bar

Как мне поступить?

Аналогично, есть ли способ создать "класс"имущество".Я знаю, что могу назначить лямбда-функцию, возвращающую новый экземпляр класса, атрибуту класса, но я бы не стал писать скобки.

1 Ответ

0 голосов
/ 27 ноября 2018

Если вы хотите использовать строку baz = Foo("baz") внутри класса даже до определения Foo ранее;это невозможно, т. е. Python выдаст вам NameError: name 'Foo' is not defined, но вот обходной путь для достижения того, что вы намереваетесь:

class Foo:
   def __init__(self, bar):
       self.bar = bar
Foo.baz=Foo('foo')

Теперь Foo.baz является экземпляром класса Foo, а также baz является атрибутом класса Foo класса и, следовательно, будет наследоваться всеми экземплярами класса:

myFoo = Foo('myFoo')

Вы можете проверить, что myFoo.baz.bar действительно 'foo', а не 'myFoo'

print(myFoo.bar) 
# myFoo
print(myFoo.baz.bar)
# foo

Также обратите внимание, что это приведет к тому, что Foo.baz, Foo.baz.baz, Foo.baz.baz.baz и т. Д. Все будут объектами Foo, поскольку Foo.baz имеет значение Foo('foo'), то есть объектFoo class и baz также являются атрибутом класса Foo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...