Python:子类AttributeE

2024-05-15 23:35:28 发布

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

Python 3.5.2版 在尝试访问父字段时,我的子类遇到了一些有趣的问题。有三个类(Command->;Newarticle->;Editarticle)。代码大致如下,我删除了其他方法,以最小化代码量):

class Command(object):
    __metaclass__=abc.ABCMeta ;
    def __init__(self):
        # set default command name
        self.__name="I hate planes" ;
        self.__has_ended=False ;        

class Newarticle(Command):
    def __init__(self, modules):
        # parent init
        Command.__init__(self) ;
        self.__output=modules[MAIN_OUTPUT] ;
        self.__input=modules[MAIN_INPUT] ;

class Editarticle(Newarticle):
    def __init__(self, modules):
        Newarticle.__init__(self, modules) ;
        #super().__init__(modules) ;

        print(dir(self)) ;

        # ERROR HAPPENS HERE !
        self.__output.use_random_function() ;

我确信模块中有MAIN\u输出,因为Newarticle可以完美地工作。 错误文本:AttributeError:“Editarticle”对象没有属性“\u Editarticle\u output”

“dir”的打印输出为:[“\u Command\uu has\u ended”、“\u Command\uu name”、“\u edittarticle\uu acc\u data”、“\u edittarticle\uu art\u id”、“\u Newarticle\uu art\u images”、“\u Newarticle\uu art\u name”、“\u Newarticle\uu art\u text”、“\u Newarticle\uu db\u mod”、“\u Newarticle\uu input”、“\u Newarticle\uu output”、“\u Newarticle\urun\u subcmds”、“\u Newarticle\uu tag\u reader”,…]等等

所以问题很明显,Python在方法之前添加了类名,甚至没有尝试在parent中查找。那我怎么修呢?我看不见问题出在哪里,觉得自己瞎了眼。你知道吗

另外,我试着调用'super()',而不是'Newarticle.init(self,modules)',结果完全一样。 P.S.P.S.我试图从第一个父级(“Command”)中删除元类ABC,同样的错误。你知道吗


Tags: 代码namegtselfmodulesoutputinitmain
1条回答
网友
1楼 · 发布于 2024-05-15 23:35:28

问题是您使用的是双下划线前缀,这会导致名称混乱。别那么做。这些很少有用。你知道吗

只需为你的属性使用普通名称

def __init__(self):
    # set default command name
    self.name = "I hate planes"
    self.has_ended = False 

(另外,请删除这些分号。在Python中不使用它们。)

相关问题 更多 >