簡體   English   中英

在Python中創建類和對象

[英]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另一個實例,即使更改了foovariable1 ,它的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM