2014-04-24 32 views
2

我在某些代码上跑了pylint,并对老式班级抱怨。将旧式班级改写为新班级

我可以通过简单地改变纠正这个:

class MyClass: 

到:

class MyClass(object): 

或者是有什么更多的参与?

+5

这是非常多的。 – BrenBarn

+0

简单的回答:是的。 –

+0

有几个角落的情况,在继承树中添加'object'可能会破坏事物。添加它,看你的程序是否以奇怪的方式破解。如果是这样,你做了一些你可能不应该放在第一位的东西:-) – mgilson

回答

2

在Python 2,写

class MyClass(object): 

就足够了。或者你切换到Python 3,其中

class MyClass: 

会很好。

继承列表通常会给出一个基类列表(请参阅为更高级用途定制类创建),因此列表中的每个项都应评估为允许子类化的类对象。缺省情况下,没有继承列表的类从基类对象继承;因此

class Foo: 
    pass 

相当于

class Foo(object): 
    pass 

参见:https://docs.python.org/3/reference/compound_stmts.html#class

此外,作为@Kevin在评论中指出,解决的方法是不平凡的,并可能导致意外使用多重继承时的行为:http://python-history.blogspot.com/2010/06/method-resolution-order.html

+0

它可以满足99%的时间。新风格类的[方法解析顺序](http://python-history.blogspot.com/2010/06/method-resolution-order.html)规则已更改,而旧代码可能依赖于在下面表现不同的角落案例这些变化。 –

+0

@KevinThibedeau,感谢您的链接,这是一个有趣的阅读。 – miku