在__init__外定义的实例属性attribute_name
我分开我的类构造函数,让它调用多个函数,如下所示:
class Wizard: def __init__(self, argv): self.parse_arguments(argv) self.wave_wand() # declaration omitted def parse_arguments(self, argv): if self.has_correct_argument_count(argv): self.name = argv[0] self.magic_ability = argv[1] else: raise InvalidArgumentsException() # declaration omitted # ... irrelevant functions omitted
当我的翻译高兴地运行我的代码时,Pylint有一个抱怨:
Instance attribute attribute_name defined outside __init__
粗略的谷歌search目前没有结果。 保持__init__
所有构造函数逻辑似乎没有组织,并且closuresPylint警告也似乎是黑客行为。
什么是Pythonic解决这个问题的方法?
这个消息背后的想法是为了可读性。 我们希望通过读取它的__init__
方法来查找实例可能具有的所有属性。
尽pipe如此,您仍然可能想要将初始化分割为其他方法。 在这种情况下,您可以简单地在__init__
中将属性分配给None
(带有一些文档),然后调用子初始化方法。
只需从parse_arguments()
返回一个元组,并根据需要解压缩到__init__
属性。
另外,我会build议您使用例外来代替使用exit(1)
。 你得到回溯,你的代码是可重用的,等等
class Wizard: def __init__(self, argv): self.name,self.magic_ability = self.parse_arguments(argv) def parse_arguments(self, argv): assert len(argv) == 2 return argv[0],argv[1]