在Python中创建类和对象

时间:2015-11-04 16:45:05

标签: python class object python-3.x

我有这个:

class Klasse1:
    variable1 = "haha"

print Klasse1.variable1

和此:

class Klasse1:
    variable1 = "haha"

Object1 = Klasse1()
print Object1.variable1

为什么我会使用第二个(太多代码)而不是第一个(显然更容易)?在许多网站和教程中,我看到人们创建的对象可以轻松获得,而无需创建它们。

2 个答案:

答案 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