是否可以从子类更新在超类中初始化的对象?

2024-10-01 02:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

所以假设我有一节课:

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

然后我想构建这个类的子类,这些子类的方法可以向初始化的列表中添加项、从中读取项或从中移除项。例如。在

^{pr2}$

这是一个有点粗糙的例子,我试图做什么。我希望我的初始列表可以用于两个类,这样它们就可以按上面所示的方式执行。但是,在我的例子中,我得到了AttributeError,说我的超类没有命名属性。在

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

有什么建议吗?有没有可能或者我必须做些别的事情来达到这个结果?在


Tags: 方法selfnumber列表initdef子类class
3条回答

_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)

“我想生成这个类的子类,这些子类的方法可以将项添加到初始化的列表中,…”

你是说希望子类继承实例属性_initiallist,并提供对其进行操作的方法?如果是这样的话,那么子类的实例将每个都有一个_initiallist属性,但是对于类的每个实例,{}将是一个不同的列表。在

在这种情况下,解决方案如张阳玉所述。在


“我希望能够将我的初始列表提供给几个类,以便他们都能按照上面所示的方式执行。”

根据标题,我可以将其解释为:我希望超类的某个实例_initiallist属性可用于两个子类的实例,这样它们就可以对同一个列表执行操作。在

如果_initiallist是一个类属性,那么可以这样做,或者在实例化子类时,可以将超类的实例作为__init__参数传递,据我目前所知。在

另外,这意味着示例中的两个类不具有关系,而是您的超类实际上是一个sharedobject(AFAIK)。在

如果将其作为类属性,则会失去一些灵活性,因为超类的不同实例都会有一个指向相同列表的属性_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)

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

相关问题 更多 >