繁体   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