如何使用__init __()初始化类变量?

时间:2013-11-24 14:58:39

标签: python class oop

据我所知,类属性在某种意义上可以用作Python的静态变量。我有一个类,我想在__init__()的第一次运行期间设置这个静态变量,即在创建第一个对象时保持它。每次都不要更新。我该怎么办?即使设置旗帜也没有帮助。

class A():
    foo=None
    foo_set_flag=False
    def __init__(self,arg_foo):
        if not self.foo_set_flag:
            self.foo=arg_foo
            foo_set_flag=True
a=A(12)
b=A(13)
print a.foo
print b.foo

给出:

12
13

当然我希望

12
12

2 个答案:

答案 0 :(得分:4)

使用ClassName.attribute_name访问类属性:

class A:
    foo = None
    foo_set_flag = False

    def __init__(self, arg_foo):
        if not A.foo_set_flag:
            A.foo = arg_foo
            A.foo_set_flag = True

a=A(12)
b=A(13)
print a.foo # -> 12
print b.foo # -> 12

self.foo = ...创建一个新的实例属性。仅当没有实例属性self.foo时,阅读foo才会访问类属性,否则它将访问实例变量foo

答案 1 :(得分:0)

而不是self,请参阅类本身:

def __init__(self,arg_foo):
    if not A.foo_set_flag:
        A.foo=arg_foo
        A.foo_set_flag=True

或者,你甚至不需要标志来实现这个目标:

>>> class A():
    foo = None
    def __init__(self, arg_foo):
        if A.foo is not None:
            A.foo = arg_foo


>>> a = A(10)
>>> b = A(20)
>>> print(a.foo)
10
>>> print(b.foo)
10