python中类与对象之间的关系_Python中类foo和类foo(对象)之间的区别

我知道class foo(object)是一种古老的定义班级的方法。但我想更详细地了解一下这两者之间的区别。

您使用的是哪个版本的python。从2.6/3.0 POV来看,这是一回事。与2.5(和以前的)版本不同。你现在用的是什么?

在python中,旧样式类和新样式类的区别可能是什么?

@温迪,看来你已经有几年的时间来考虑这个问题了,所以你能选择一个答案来回答这个问题吗?甚至看起来社区已经提出了建议。;-)

在Python2.2之前,基本上有两种不同类型的类:由C扩展和C编码的内置(类型)定义的类和由Python类语句(类)定义的类。当您想要混合Python类型和内置类型时,这会导致问题。最常见的原因是子类化。如果您想在python代码中对列表类型进行子类化,那么您运气不好,因此使用了各种各样的解决方法,例如(在userlist模块中)对列表的纯python实现进行子类化。

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

方法分辨率顺序(MRO)。菱形继承层次结构中的行为存在差异(其中a继承b和c,两者都继承公共的基类d)。以前,方法是从左到右查找的,深度优先(即a b d c d),但是如果c重载d的成员,a将不会使用它(因为它首先发现d的实现),这是bad用于各种类型的编程(例如使用mixin类)。新的样式类将把这种情况视为一个b c d(查看类的__mro__属性以查看它将搜索的顺序)。

添加了__new__构造函数,它允许类充当工厂方法,而不是返回类的新实例。用于返回特定的子类,或者重用不可变的对象,而不是在不需要更改创建接口的情况下创建新的子类。

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

class foo(object):是声明类的"新"方法。

这个更改是在python 2.2中进行的,有关差异的解释,请参阅这个pep。

更准确的说法是"声明新样式类的方法"。顺便说一句,从python 3.0"class foo:"开始是一个新的风格类。

子类化object生成一个新的风格类。新型课程的两个众所周知的优势是:

元类(类似于类工厂,但工作透明)

属性(getter和setter…)

实际上,元类也适用于旧式类。一些属性功能也可以工作(getter,而不是setter)

提到这个foo类(object)中的对象旨在使您的python 3代码与python 2和3兼容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值