从子类Python

时间:2016-01-11 08:38:54

标签: python python-2.7 class arguments

这是我的名为Game_Factors的python文件:

from Fesnoria_Game_Setup import Game_Setup

class Game_Events(Game_Setup):
    def __init__(self):
        super(Game_Events, self).game_setup(self.MAP_FILENAME, self.GS)        

我正在导入包含子类Game_Setup的类Setup

在子类Setup中,我有两个变量,一个名为self.MAP_FILENAME,另一个名为self.GS,我在导入Game_Setup类时将其用作参数。< / p>

但是当以Game_Setupself.MAP_FILENAME作为参数导入self.GS类时,我得到错误代码:

AttributeError: 'Game_Factors' object has no attribute 'MAP_FILENAME'

我有什么想法可以解决这个问题吗?

Game_Setup:

class Game_Setup(Setup):
    def __init__(self)
        super(Game_Setup, self).__init__()   

3 个答案:

答案 0 :(得分:1)

试试这个:

def __init__(self):
        super(Game_Events, self).__init__()
        self.game_setup(self.MAP_FILENAME, self.GS)

答案 1 :(得分:0)

$ cat game_event.py 

from game_setup import Game_Setup

class Game_Event(Game_Setup):

    def __init__(self):
        super(Game_Event, self).__init__()

        print self.MAP_FILENAME

ge = Game_Event()

$ cat game_setup.py
from setup import Setup

class Game_Setup(Setup):

    def __init__(self):
        super(Game_Setup, self).__init__()


$ cat setup.py

class Setup(object):

    def __init__(self):
        self.MAP_FILENAME = 'myfile.py'
        self.GS = 'GS'

像上面那样。

答案 2 :(得分:0)

如果我正确理解您在那里描述的内容,原因是您self.MAP_FILENAME内的self.GS范围内没有__init__Game_Events因为它们已定义在__init__的{​​{1}}超类中,在这个地方没有被调用过。超类的构造函数不是隐式调用的,因此添加对超类Setup的调用:

__init__

这种方式应该可行。

注意:如果您决定使用from Fesnoria_Game_Setup import Game_Setup class Game_Events(Game_Setup): def __init__(self): super(Game_Events, self).__init__() super(Game_Events, self).game_setup(self.MAP_FILENAME, self.GS) ,请在代码中一致地使用它,否则您可能无法在继承树中获得您期望的内容,因为MRO的工作原理。