兩者之間的區別在於,在上面的示例中,您正在創建類屬性,而在init中您正在創建一個實例屬性。兩者之間的區別是:
class Foo():
bob = "my name is bob"
print(Foo.bob)
# outputs "my name is bob"
class Foo():
def __init__(self):
self.bob = "my name is bob"
做print(Foo.bob)
:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'Foo' has no attribute 'bob'
要在初始化訪問鮑勃你必須實例:
f = Foo()
print(f.bob)
# outputs "my name is bob"
什麼進一步區分t這些實現中的一個是,類屬性將在所有實例之間共享,而實例屬性僅在您的實例中共享。
因此,對於您的__init__
中定義的任何內容,如果您創建Foo的新對象,則不會對init中的變量進行任何對Foo的其他實例的更改。
但是,對於類屬性,無論您更改的任何類屬性都將在所有Foo實例中更改。