我有这个:
class Klasse1:
variable1 = "haha"
print Klasse1.variable1
和此:
class Klasse1:
variable1 = "haha"
Object1 = Klasse1()
print Object1.variable1
为什么我会使用第二个(太多代码)而不是第一个(显然更容易)?在许多网站和教程中,我看到人们创建的对象可以轻松获得,而无需创建它们。
答案 0 :(得分:6)
您可以创建保持状态的对象。如果你有类似的东西:
class Wallet(object):
balance = 0
在类的多个实例之间共享相同的平衡是没有意义的。您要为您尝试跟踪的每一笔钱创建一个Wallet
的新实例。
因为您通过执行以下操作来使用它:
fred.wallet = Wallet
jim.wallet = Wallet # same object!
所以现在当Fred花钱时
fred.wallet.balance -= 3.50
Jim也把这笔钱花了。
>>> print(jim.wallet.balance)
3.50
相反,您需要创建类Wallet
的INSTANCES并为每个类创建自己的状态
class Wallet(object):
def __init__(self, balance=0):
# __init__ is called when you instantiate the class
self.balance = balance
fred.wallet = Wallet()
jim.wallet = Wallet()
弗雷德花钱的时候:
fred.wallet.balance -= 3.50
Jim不会受到影响,因为他的Wallet
对象是另一个实例
>>> print(jim.wallet.balance)
0
答案 1 :(得分:3)
这是一个难以简洁回答的难题,但它归结为您希望拥有多个Klasse1
的实例。如果你知道你只需要上课并且永远不会实例化它,你会没事的。如果你实例化它,(即调用类并使用返回的对象),你可以在不修改类变量的情况下更改variable1
成员:
class Klasse1:
variable1 = "haha"
foo = Klasse1()
print foo.variable1
>>>'haha'
foo.variable1 = 123
print Klasse1.variable1
>>>'haha'
如果您创建了Klasse1
的另一个实例,即使在更改variable1
的{{1}}之后,'haha'
仍然是foo
。
variable1
有些棘手的是,如果您更改bar = Klasse1()
print bar.variable1
>>>'haha'
,则只有Klasse1.variable1
会发生变化,bar.variable1
会保持foo.variable1
。
123