Python 3 类创建的最佳实践

Tim*_*ler 7 python class python-3.x

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

class MyClass:
    pass

class MyClass():
    pass

class MyClass(object):
    pass
Run Code Online (Sandbox Code Playgroud)

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

MSe*_*ert 7

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

class MyClass(object):
    pass
Run Code Online (Sandbox Code Playgroud)

明确提到你想要子类化( Python 之禅object没有提到:“显式优于隐式。”)并且如果你(或其他人)运行代码,你不会遇到讨厌的错误。 Python 2里这些语句是不同的


lee*_*ong 4

在 Python 2 中,有两种类型的类。要使用新样式,您必须显式继承自object. 如果没有,则使用旧式实现。

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

无论如何,你可能会想使用新式类,但如果你的代码应该同时适用于 python 2 和 3,你就必须显式地从 object 继承:

class Foo(object):
    pass 
Run Code Online (Sandbox Code Playgroud)

跳到另一个答案,是的,Python 之禅指出

显式的比隐式的好。

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

如果您只使用 python 3,并且您的代码/项目明确声明,不存在可能的混淆,所有没有显式继承的类都会自动从 object 继承。如果由于某种不明原因基类将来发生变化(让我们想象从objectObject),相同的代码将起作用。Python 之禅也说

简单总比复杂好。

(当然,在这个例子中复杂是相当夸张的,但仍然......)

因此,如果您的代码仅支持 python3,您应该使用最简单的形式:

class Foo:
    pass
Run Code Online (Sandbox Code Playgroud)

带有 just 的表格()非常无用,因为它没有提供任何有价值的信息。