当前位置:  开发笔记 > 编程语言 > 正文

Python中类foo和类foo(对象)之间的区别

如何解决《Python中类foo和类foo(对象)之间的区别》经验,为你挑选了2个好方法。

我知道这class foo(object)是一种老式的定义课程的方式.但我想更详细地了解这两者之间的区别.



1> Brian..:

在python 2.2之前,基本上有两种不同类型的类:由C扩展和C编码内置(类型)定义的类和由python类语句(类)定义的类.当你想混合python-types和内置类型时,这会导致问题.最常见的原因是子类化.如果你想在python代码中继承列表类型,那你就运气不好,因此使用了各种变通方法,比如子类化列表的纯python实现(在UserList模块中).

这是一个相当难看的,所以在2.2中有一个统一python和内置类型的举动,包括从它们继承的能力.结果是"新风格".但是这些与旧式类有一些不兼容的差异,因此对于向后兼容性,裸类语法创建旧式类,而新行为是通过从对象继承获得的.最明显的行为差异是:

方法解析顺序(MRO).菱形继承层次结构中的行为存在差异(其中A继承自B和C,它们都从公共基类D继承.以前,方法从左到右查找,深度优先(即ABDCD)但是如果C重载了D的一个成员,它将不会被A使用(因为它首先发现D的实现)这对于各种编程风格(例如使用mixin类)是不好的.新样式类将这种情况视为ABCD, (查看__mro__类的属性以查看它将搜索的顺序)

__new__构造函数中添加,允许类充当工厂方法,而不是返回类的新实例.用于返回特定子类,或重用不可变对象而不是创建新对象而无需更改创建接口.

描述符.这些是属性,类方法,静态方法等背后的特征.本质上,它们提供了一种方法来控制在(新样式)类上访问或设置特定属性时发生的事情.



2> Brian C. Lan..:

class foo(object): 是宣布课程的"新"方式.

这个更改是在python 2.2中进行的,请参阅此PEP以了解差异的解释.


说"宣布新式课程的方式"会更准确.BTW,从python 3.0开始"class foo:"是一个新风格的类.
推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有