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
添加回答
举报