2024-05-20 03:42:30 发布
网友
在我的研究中,我发现在Python 3中,这三种类型的类定义是同义的:
class MyClass: pass class MyClass(): pass class MyClass(object): pass
但是,我没能找到推荐的方法。我应该使用哪一个作为最佳实践?在
在python2中,有2types of classes。要使用新样式,必须显式地从object继承。如果不是,则使用旧样式的实现。在
object
在Python3中,所有类都隐式地扩展object,不管你自己是否这么说。在
无论如何,您可能会希望使用新样式的类,但是如果您的代码应该同时使用python 2和3,则必须显式地从对象继承:
class Foo(object): pass
要跳到另一个答案,是的Zen of Python状态
Explicit is better than implicit.
我认为这意味着我们应该避免代码中可能出现的混乱,就像我们在语言中一般,记住代码就是交流。在
如果您只使用python3,并且您的代码/项目明确声明,不会有任何混淆,所有没有显式继承的类都会自动从object继承。如果基类在将来由于某种模糊的原因而改变(让我们想象一下从object到object),同样的代码也可以工作。而Zen of Python也这么说
Simple is better than complex.
(当然,在这个例子中,复杂是一个相当夸张的说法,但仍然…)
因此,如果代码只支持python3,那么应该使用最简单的形式:
只有()的表单是非常无用的,因为它没有提供任何有价值的信息。在
()
我会说:使用第三个选项:
class MyClass(object): pass
它显式地提到您想要子类object(并且Zen of Python没有提到:“显式比隐式好。”),并且您不会遇到严重的错误,以防您(或其他人)在Python2where these statements are different中运行代码。在
在python2中,有2types of classes。要使用新样式,必须显式地从
object
继承。如果不是,则使用旧样式的实现。在在Python3中,所有类都隐式地扩展
object
,不管你自己是否这么说。在无论如何,您可能会希望使用新样式的类,但是如果您的代码应该同时使用python 2和3,则必须显式地从对象继承:
要跳到另一个答案,是的Zen of Python状态
我认为这意味着我们应该避免代码中可能出现的混乱,就像我们在语言中一般,记住代码就是交流。在
如果您只使用python3,并且您的代码/项目明确声明,不会有任何混淆,所有没有显式继承的类都会自动从object继承。如果基类在将来由于某种模糊的原因而改变(让我们想象一下从object到object),同样的代码也可以工作。而Zen of Python也这么说
(当然,在这个例子中,复杂是一个相当夸张的说法,但仍然…)
因此,如果代码只支持python3,那么应该使用最简单的形式:
^{pr2}$只有
()
的表单是非常无用的,因为它没有提供任何有价值的信息。在我会说:使用第三个选项:
它显式地提到您想要子类
object
(并且Zen of Python没有提到:“显式比隐式好。”),并且您不会遇到严重的错误,以防您(或其他人)在Python2where these statements are different中运行代码。在相关问题 更多 >
编程相关推荐