Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建类的静态属性(属性是同一类的实例)_Python_Oop_Static - Fatal编程技术网

Python 创建类的静态属性(属性是同一类的实例)

Python 创建类的静态属性(属性是同一类的实例),python,oop,static,Python,Oop,Static,假设我有一个定义如下的类: class Foo(): baz = None def __init__(self, bar): self.bar = bar 现在,在这个例子中,Foo.baz是None。现在让我们假设这个class属性需要是Foo的一个实例,如下所示: class Foo(): baz = Foo("baz") def __init__(self, bar): self.bar = bar 我将如何进行 类似地,是否有

假设我有一个定义如下的类:

class Foo():
   baz = None
   def __init__(self, bar):
       self.bar = bar
现在,在这个例子中,
Foo.baz
None
。现在让我们假设这个class属性需要是
Foo
的一个实例,如下所示:

class Foo():
    baz = Foo("baz")
    def __init__(self, bar):
        self.bar = bar
我将如何进行


类似地,是否有任何方法可以创建“类属性”。我知道我可以分配一个lambda函数,将类的新实例返回给class属性,但我不想写括号。

如果您想在类中使用行
baz=Foo(“baz”)
,甚至在前面定义
Foo
之前;ie Python不可能向您抛出一个
NameError:name'Foo'没有定义,但这里有一个解决方法来实现您的目标:

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
等。所有这些都是
Foo
对象,因为
Foo.baz
具有值
Foo('Foo')
Foo
类的对象,
baz
也是
Foo
的类属性