所以我想说我有一个班级:
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'
有关如何执行此操作的任何提示?它甚至可能还是我必须做其他事情来实现这个结果?
答案 0 :(得分:2)
_initallist
是一个实例属性,您无法通过Super._initallist
访问它。
我认为你想要做的就是下面。您需要在SuperClass
中初始化SubClass
。我认为如果这是一个正确的是一个关系,那么number
中需要SubClass
。
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)
答案 1 :(得分:1)
只需self._initiallist.append(self._thisline + 1)
答案 2 :(得分:0)
“我想构建此类的子类,其中包含可以将项添加到初始化列表的方法,......”
您是说要让子类继承实例属性 _initiallist
并提供对其进行操作的方法?如果是这种情况,则子类的实例将各自具有_initiallist
属性,但每个_initiallist
类的每个实例都将是不同的清单。
在这种情况下,解决方案如 zhangyangyu 所述。
“我希望能够将我的初始列表提供给几个类,这样他们就可以按照上面的说明对其进行操作。”
根据标题,我可以将其解释为:我希望超类的某些实例的_initiallist
属性可用于实例的几个子类,所以他们都可以在同一个精确的列表上行动。
如果_initiallist
是一个类属性,你可以这样做,或者你可以在实例化子类时将超类的实例作为__init__
参数传递,据我所知。
此外,这意味着您示例中的两个类不具有是关系,而是您的超类实际上是一个共享对象(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)