在我的研究中,我发现在Python 3中这三种类型的类定义是同义词:
class MyClass:
pass
class MyClass():
pass
class MyClass(object):
pass
但是,我无法找出推荐的方式。我应该使用哪一种作为最佳做法?
答案 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
只有()
的表单毫无用处,因为它没有提供任何有价值的信息。