[英]Is it possible to access the variable from a method of a superclass in a subclass?
[英]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.