[英]Creating classes and objects in Python
我有這個:
class Klasse1:
variable1 = "haha"
print Klasse1.variable1
和這個:
class Klasse1:
variable1 = "haha"
Object1 = Klasse1()
print Object1.variable1
為什么我要使用第二個(太多的代碼)而不是第一個(顯然更簡單)? 在許多站點和教程中,我已經看到人們為無需創建對象就可以輕松獲得的對象創建對象。
您創建對象以保持狀態。 如果您有類似以下內容:
class Wallet(object):
balance = 0
在類的多個實例之間共享相同的平衡是沒有意義的。 您想要為要跟蹤的每一筆錢創建一個新的Wallet
實例。
因為您可以通過執行以下操作來使用它:
fred.wallet = Wallet
jim.wallet = Wallet # same object!
所以現在弗雷德花錢的時候
fred.wallet.balance -= 3.50
吉姆也花了那筆錢。
>>> 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
這是一個很難回答的難題,但是要歸結為當您想擁有多個Klasse1
實例時。 如果您知道只需要該類而無需實例化它,那么您會很好的。 如果您實例化了它(即調用類並使用返回的對象),則可以更改variable1
成員而無需修改類的變量:
class Klasse1:
variable1 = "haha"
foo = Klasse1()
print foo.variable1
>>>'haha'
foo.variable1 = 123
print Klasse1.variable1
>>>'haha'
如果您創建了Klasse1
另一個實例,即使更改了foo
的variable1
,它的variable1
仍然是'haha'
。
bar = Klasse1()
print bar.variable1
>>>'haha'
棘手的是,如果您更改Klasse1.variable1
,則僅bar.variable1
會更改, foo.variable1
仍為123
。
Klasse1.variable1 = "this isn't funny"
print foo.variable1
>>>123
print bar.variable1
>>>"this isn't funny"
print Klasse1.variable1
>>>"this isn't funny"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.