亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

添加的類如何使用主類的屬性?

添加的類如何使用主類的屬性?

汪汪一只貓 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 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號