[英]Dependencies between attributes of 2 and more classes
是否可以初始化具有相互依賴的屬性的類的實例(不是循環方式)?
今天,我使用字典而不是類,如下所示:
dictA = {'A1': 10}
dictB = {'B1': 2}
dictB['B2'] = dictA['A1'] * dictB['B1']
dictA['A2'] = dictB['B2'] * 3 # dictA['A1'] * dictB['B1'] * 3
print(dictA) # {'A1': 10, 'A2': 60}
print(dictB) # {'B1': 2, 'B2': 20}
當我嘗試用類表達上述內容時,我最終得到RecursionError: maximum recursion depth exceeded
。
class A:
def __init__(self):
self.A1 = 10
self.A2 = B().B2 * 3
class B:
def __init__(self):
self.B1 = 2
self.B2 = self.B1 * A().A1
a = A()
b = B()
字典(類)是分開的,因為它們代表不同類型的數據(例如員工和時間)。
您需要使初始化程序非循環。 然后你可以使用@property
懶惰地評估屬性
class A:
def __init__(self):
self.A1 = 10
@property
def A2(self):
return B().B2 * 3
class B:
def __init__(self):
self.B1 = 2
@property
def B2(self):
return self.B1 * A().A1
a = A()
b = B()
print(a.A1, a.A2, b.B1, b.B2)
結果:
10 60 2 20
另一種選擇:
class A:
def __init__(self):
self.A1 = 10
def add_A2(self, x):
self.A2 = x.B2 * 3
class B:
def __init__(self):
self.B1 = 2
def add_B2(self, x):
self.B2 = self.B1 * x.A1
a = A()
b = B()
b.add_B2(a)
a.add_A2(b)
你得到一個RecursionError
因為你創建了一個B
的實例來設置A2
,並且要創建一個B
的實例,你需要創建一個A
的實例來設置B2
。 您將繼續以循環方式創建A
和B
的實例。
您可以聲明 class 屬性,無需創建 class 的實例即可使用。 請注意,對於 class 的所有實例,此值始終相同。 因此,您可以將其用於像days_of_week = 7
這樣的值,但不能用於age = 34
的人,因為人的年齡並不總是 34 歲。
假設A1
和A2
可以是 class 屬性,它們始終相同,您可以執行以下操作:
class A:
A1 = 10
def __init__(self):
self.A2 = B.B1 * self.A1 * 3
class B:
B1 = 2
def __init__(self):
self.B2 = self.B1 * A.A1
a = A()
b = B()
print(a.A1, a.A2)
print(b.B1, b.B2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.