所以可以说我有一堂课:
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,说我的超类没有命名属性。
AttributeError: type object 'SuperClass' has no attribute '_initiallist'
有关如何执行此操作的任何提示?甚至有可能还是我需要做其他事情才能达到这个结果?
“我想建立此类的子类,这些子类具有可以将项目添加到初始化列表的方法,...”
您是说要子类继承实例属性 _initiallist
并提供对其执行操作的方法吗?如果是这种情况,那么实例子类将各自拥有的_initiallist
属性,但每个_initiallist
该类的每个实例都将是一个不同的列表。
在那种情况下,解决方案就如张扬宇所描述的。
“我希望能够将我的初始清单提供给几个班级,以便他们都可以像上面所示那样对它采取行动。”
基于标题,我可以将其解释为:我希望超类_initiallist
的某些实例的属性可用于几个子类的实例,以便它们都可以作用于相同的精确列表。
如果_initiallist
是class属性,则可以执行此操作,或者__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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句