3 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
您無法訪問該屬性,因?yàn)槟腅lement對(duì)象不知道該類ComplexSystem。有一些方法可以訪問該屬性。
1-您可以定義attr_a為靜態(tài)屬性(并非總是可行)
2- 你可以將你的ComplexSystem對(duì)象傳遞給你的Element對(duì)象(檢查@milanbalazs 答案)
3-向您的Element班級(jí)添加一個(gè)屬性并在添加到時(shí)分配其值ComplexSystem
class ComplexSystem:
def __init__(self, attr_a):
self.attr_a = attr_a
self.elements = []
def add_element(self, element):
element.assign_attr(self.attr_a)
self.elements.append(element)
class Element:
def assign_attr(self, value):
self.complex_system_attr = value
4- 添加另一個(gè)類來處理數(shù)據(jù)。你可以傳遞attr_a給do_somthing你的類的方法Element,你應(yīng)該將ElementList對(duì)象存儲(chǔ)在你的ComplexSystem類中,而不是當(dāng)前列表中。例子:
class ElementList:
def __init__(self, elements, attr_a):
self.attr_a = attr_a
self.elements = elements
def do_something(self, index):
self.elements[index].do_something(self.attr_a)

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
你有更多可能的解決方案嗎?您沒有分享足夠的信息來選擇最適合您的。
您可以將 的實(shí)例傳遞ComplexSystem給Element類(我想在您的情況下沒問題)。
class Element:
def __init__(self, complex_system_inst):
self.complex_system_inst = complex_system_inst
def do_something(self):
print("attr_a from Element: {}".format(self.complex_system_inst.attr_a))
mySystem = ComplexSystem("foo")
new_element = Element(mySystem)
mySystem.add_element(new_element)
mySystem.elements[0].do_something()
輸出:
>>> python3 test.py
attr_a from Element: foo
在您的情況下,您可以使用您的mySystem對(duì)象,因?yàn)樗诜秶鷥?nèi)(如全局變量)。
class Element:
@staticmethod
def do_something():
print("attr_a from Element: {}".format(mySystem.attr_a))
mySystem = ComplexSystem("foo")
new_element = Element()
mySystem.add_element(new_element)
mySystem.elements[0].do_something()
輸出:
>>> python3 test.py
python3 test.py
attr_a from Element: foo

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
嘗試使用這個(gè):
class ComplexSystem:
def __init__(self, attr_a):
self.attr_a = attr_a
self.elements = []
def add_element(self, element):
e = Element()
e.assign_attr(self.attr_a)
self.elements.append(e)
class Element:
def assign_attr(self, value):
self.complex_system_attr = value
添加回答
舉報(bào)