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,同样的错误。你知道吗
问题是您使用的是双下划线前缀,这会导致名称混乱。别那么做。这些很少有用。你知道吗
只需为你的属性使用普通名称
(另外,请删除这些分号。在Python中不使用它们。)
相关问题 更多 >
编程相关推荐