Python:没有在子类__init__中指定变量,调用方法的问题

时间:2015-06-05 22:14:48

标签: python subclass

我有一个有很多参数的超类。我想创建一个共享所有这些参数的子类,并添加额外的一个或两个参数。为了省略双重编码,我使用了Avoid specifying all arguments in a subclass中指定的方法:

class Container(Item):

  def __init__(self,**kwargs):
    try: self.is_locked=kwargs.pop('is_locked')
    except KeyError: pass
    super(Container, self).__init__(**kwargs)

  def open(self):
    print "aw ys"

然而,当我尝试调用Container类的对象时:

> some_container.open()
AttributeError: 'Item' object has no attribute 'open'

似乎some_container不是Container(),而是添加了一个变量is_locked的Item()。我做错了什么?

编辑:我的项目定义:

class Item(object:
def __init__(self,istemplate,id,short,long,type,flags,value,damagerange,damagereductionrange,weight): 
    if istemplate==False:
        self.__class__.instances.append(self)
    self.istemplate=istemplate
(... many variables like that...)
    self.id=id
    self.randomizestuff() 
    if istemplate==True:
        self.__class__.templates.append(copy.deepcopy(self))

1 个答案:

答案 0 :(得分:0)

好的,经过一些研究后发现我实际上并没有引用some_container.open()中的容器,而是一个由同一模板创建项目实例的函数创建的动态项目。该函数将新实例定义为Item(...)而不是Container(...),因为它是在引入任何子类之前创建的。

some_container=Container(...)
some_container.open()

上述内容从一开始就有效,因此payhima无法复制我的错误。