为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

汪汪一只猫 2023-03-08 14:21:16
所以,我有这个类 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()
查看完整描述

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)


查看完整回答
反对 回复 2023-03-08
?
紫衣仙女

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


查看完整回答
反对 回复 2023-03-08
?
青春有我

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


查看完整回答
反对 回复 2023-03-08
  • 3 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信