Если вы хотите использовать строку 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
.