類的任何實體都以Square等于 2 的整數開始。當在square_me實體上呼叫方法時,實體將乘以自身。這可以進行任意次數(例如square_me,在一個實體上呼叫一次會產生值 4,square_me在同一個實體上再次呼叫會產生值 16,等等)。
class Square:
def __init__(self):
self.integer = 2
def square_me(self):
self.integer = self.integer * self.integer
def get_me(self):
return self.integer
n1 = Square()
n2 = Square()
n3 = Square()
n1.square_me()
val1 = n1.get_me()
print(val1) # 4
n2.square_me()
n2.square_me()
val2 = n2.get_me()
print(val2) # 16
這很簡單,但是,我還希望該類Square跟蹤所有實體的總值。這個總值應該可以通過類以及任何實體獲得。
例如:
print(val1) # 4
print(val2) # 16
print(Square.total) # 20
我嘗試將每個實體添加到字典中并將其中的值相加。雖然我可以對類外的字典值求和并得到正確答案print(sum(Square.instances.values())),但我想對其進行設計,以便類Square跟蹤所有實體的總值。相反,它只是列印:
<function Square.get_total at 0x000001CADA21B0D0>
我覺得我接近解決方案但需要一些指導。這是我的代碼:
class Square:
instances = {}
total = sum(instances.values())
def __init__(self):
self.integer = 2
def square_me(self):
self.integer = self.integer * self.integer
self.instances[self] = (self.integer)
def get_total(self):
return self.total
def get_me(self):
return self.integer
n1 = Square()
n2 = Square()
n1.square_me()
val1 = n1.get_me()
print(val1) # 4
n2.square_me()
n2.square_me()
val2 = n2.get_me()
print(val2) # 16
print(Square.instances) # Print the dictionary.
print(sum(Square.instances.values())) # This works.
print(Square.get_total) # This does not work.
uj5u.com熱心網友回復:
Square.get_total是一個函式。你需要Square.get_total(). 在那種情況下,get_total是不會得到一個self論點。此外,您永遠不會 update total,因此它會回傳任何內容。你需要get_total做return sum(Square.instances.values()). 此外,您需要在初始化期間將實體存盤在串列中,而不僅僅是在square_me呼叫之后。像這樣:
class Square:
instances = {}
def __init__(self):
self.integer = 2
Square.instances[self] = self.integer
def square_me(self):
self.integer = self.integer * self.integer
Square.instances[self] = self.integer
@classmethod
def get_total(cls):
return sum(cls.instances.values())
def get_me(self):
return self.integer
n1 = Square()
n2 = Square()
n1.square_me()
val1 = n1.get_me()
print(val1) # 4
n2.square_me()
n2.square_me()
val2 = n2.get_me()
print(val2) # 16
print(sum(Square.instances.values())) # This works.
print(Square.get_total()) # This does not work.
輸出:
4
16
20
20
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524586.html
下一篇:如何訪問類物件的屬性?
