Python 3类创建的最佳实践

时间:2017-08-23 07:43:37

标签: python python-3.x class

在我的研究中,我发现在Python 3中这三种类型的类定义是同义词:

class MyClass:
    pass

class MyClass():
    pass

class MyClass(object):
    pass

但是,我无法找出推荐的方式。我应该使用哪一种作为最佳做法?

2 个答案:

答案 0 :(得分:4)

我会说:使用第三个选项:

class MyClass(object):
    pass

显式提到你想要继承object(而不是Zen of Python提及:"显式优于隐式。&# 34;)如果您(或其他人)曾在Python 2 where these statements are different中运行代码,您就不会遇到令人讨厌的错误。

答案 1 :(得分:3)

在Python 2中,有{2} types of classes。要使用新样式,您必须从object显式继承。如果没有,则使用旧式实现。

在Python 3中,无论你是否自己这么说,所有类都会隐式地扩展object

你可能会想要使用新式的类,但是如果你的代码应该同时适用于python 2和3,你必须明确地从对象继承:

class Foo(object):
    pass 

要跳到另一个答案,是Zen of Python状态

  

明确比隐含更好。

我认为这意味着我们应该避免在代码中可能出现混淆,就像我们应该在语言中一样,记住代码就是沟通。

如果你只使用python 3,并且你的代码/项目明确说明了这一点,那么就没有可能的混淆,没有显式继承的所有类都会自动从对象继承。如果由于某些不明原因将来的基类发生变化(让我们想象从 object Object ),相同的代码将起作用。 Zen of Python也说

  

简单比复杂更好。

(当然复杂在这个例子中是夸大其词但仍然......)

所以,如果你只编写支持python3,你应该使用最简单的形式:

class Foo:
    pass

只有()的表单毫无用处,因为它没有提供任何有价值的信息。