添加的类如何使用主类的属性?

所以,我有这个类 ComplexSystem。此类具有自己的属性(本例中为 attr_a)。它也有几个要素。在另一个过程中,调用元素的方法,并且需要 ComplexSystem 的属性来计算某些东西。我应该怎么做?我在这里提供了一个例子:


class ComplexSystem:


    def  __init__(self, attr_a):

        self.attr_a  = attr_a

        self.elements = []


    def add_element(self, element):

        self.elements.append(element)


class Element:


    def do_something(self):

    ### I want to use the attr_a of the ComplexSystem here, what should I do?



mySystem = ComplexSystem("foo")

new_element = Element()

mySystem.add_element(new_element)

mySystem.elements[0].do_something()


汪汪一只猫
浏览 112回答 3
3回答

互换的青春

您无法访问该属性,因为您的Element对象不知道该类ComplexSystem。有一些方法可以访问该属性。1-您可以定义attr_a为静态属性(并非总是可行)2- 你可以将你的ComplexSystem对象传递给你的Element对象(检查@milanbalazs 答案)3-向您的Element班级添加一个属性并在添加到时分配其值ComplexSystemclass 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 = value4- 添加另一个类来处理数据。你可以传递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)

紫衣仙女

你有更多可能的解决方案吗?您没有分享足够的信息来选择最适合您的。您可以将 的实例传递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.pyattr_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.pypython3 test.pyattr_a from Element: foo

青春有我

尝试使用这个: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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python