簡體   English   中英

是否可以從子類更新超類中初始化的對象?

[英]Is it possible to update an object initialized in a superclass from a subclass?

所以我想說我有一節課:

class SuperClass():
    def __init__(self, number):
       self._inputnumber = number
       self._initallist = []

然后我想構建這個類的子類,它的方法可以將項添加到初始化列表,從中讀取項或從中刪除項。 例如。

class SubClass(SuperClass):
     def __init__(self, number, current_line, new_line): 
        self._number = number
        self._thisline = current_line
        self._gohere = new_line
     def execute(self):
        (SuperClass._initallist).append(self._thisline + 1)

這是我想要做的一個粗略的例子。 我希望能夠將我的初始列表提供給幾個類,以便它們可以如上所示對其進行操作。 然而,在我的情況下最終發生的是,我得到一個AttributeError,說我的SuperClass沒有命名屬性。

AttributeError: type object 'SuperClass' has no attribute '_initiallist'

關於如何做到這一點的任何提示? 它甚至可能還是我必須做其他事情來實現這個結果?

_initallist是一個實例屬性,您無法通過Super._initallist訪問它。

我想你想做的就是下面。 您需要在SubClass初始化SuperClass 我認為如果這是一個正確的一對一關系,那么SubClass需要有一個number

class SuperClass():
    def __init__(self, number):
       self._inputnumber = number
       self._initallist = []

class SubClass(SuperClass):
     def __init__(self, number, current_line, new_line):
        SuperClass.__init__(self, number) 
        self._thisline = current_line
        self._gohere = new_line
     def execute(self):
        self._initallist.append(self._thisline + 1)

只做self._initiallist.append(self._thisline + 1)

“我想構建這個類的子類,它具有可以將項添加到初始化列表的方法,......”

您是否希望子類繼承實例屬性 _initiallist並提供對其進行操作的方法? 如果是這種情況,那么子類的實例將各自具有_initiallist屬性, 每個類的實例的每個_initiallist將是不同的列表。

在那種情況下,解決方案就像張揚宇所描述的那樣。


“我希望能夠將我的初始列表提供給幾個類,這樣他們就可以按照上面的說明對其進行操作。”

基於標題,我可以將其解釋為:我希望超類的某個實例_initiallist屬性可用於幾個子類的實例 ,因此它們都可以在相同的精確列表上運行。

如果_initiallist是一個類屬性,你可以這樣做,或者你可以在實例_initiallist類時_initiallist類的實例作為__init__參數傳遞,據我所知。

此外,這將意味着,這兩個班在你的例子並不posses的是有關系的,而是超類是一個真正的共享對象(據我所知)。

如果你使它成為一個類屬性,那么你會失去一些靈活性,因為那時超類的不同實例都會有一個屬性_initiallist ,它指向同一個完全列表。 如果你將它作為一個實例屬性保存並將超類的實例作為參數(作為共享對象)傳遞給子類,那么你仍然可以實現你想要做的事情,並且仍然可以靈活地創建多個實例你的共享對象。

class SharedObject(object):

    def __init__(self, number):
        self._inputnumber = number
        self._initiallist = []


class Client(object):

    def __init__(self, obj, current_line, new_line):
        self._sharedobj = obj
        self._thisline = current_line
        self._gohere = new_line

    def execute(self):
        self._sharedobj._initiallist.append(self._thisline + 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM