3 回答

TA貢獻1797條經驗 獲得超6個贊
您無法訪問該屬性,因為您的Element對象不知道該類ComplexSystem。有一些方法可以訪問該屬性。
1-您可以定義attr_a為靜態屬性(并非總是可行)
2- 你可以將你的ComplexSystem對象傳遞給你的Element對象(檢查@milanbalazs 答案)
3-向您的Element班級添加一個屬性并在添加到時分配其值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- 添加另一個類來處理數據。你可以傳遞attr_a給do_somthing你的類的方法Element,你應該將ElementList對象存儲在你的ComplexSystem類中,而不是當前列表中。例子:
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貢獻1839條經驗 獲得超15個贊
你有更多可能的解決方案嗎?您沒有分享足夠的信息來選擇最適合您的。
您可以將 的實例傳遞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對象,因為它在范圍內(如全局變量)。
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貢獻1784條經驗 獲得超8個贊
嘗試使用這個:
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
添加回答
舉報