打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python新式类和旧式类的区别?


公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。

废话不多说,开始今天的题目:

问:说说Python新式类和旧式类的区别?

答:Python中类分两种:旧式类和新式类 。python的新式类是从2.2版本引进来的,可以将之前的类叫做经典类或者旧式类。

新式类是官方为了统一类和实例引入的 。在2.2之前,比如2.1版本中,类和类型是不同的,如a是ClassA的一个实例,那么a.__class__返回 ‘ class    __main__.ClassA‘ ,type(a)返回总是<type 'instance'>。而引入新类后,比如ClassB是个新类,b是ClassB的实例,b.__class__和type(b)都是返回‘class '__main__.ClassB' ,这样就统一了。

说说新式类和旧式类的区别?

1、新式类都从object继承,经典类不需要。

2、新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索

3、新式类相同父类只执行一次构造函数,经典类重复执行多次。

说说Python2和Python3中的区别?


在Python 3.x中取消了经典类,默认都是新式类,并且不必显式的继承object:
class Person(object):pass
class Person():pass
class Person:pass
三种写法并无区别,推荐第一种


但是在Python2.x中,默认都是经典类,只有显式继承了object才是新式类,即:
class Person(object):pass 新式类写法
class Person():pass 经典类写法
class Person:pass 经典类写法


为了确保在Python2.x中使用的是新式类,有两种以下方法:

  1. 元类,在类模块代码的最前面加入如下代码 __metaclass__ = classname(自定义的某个新式类)。

2. 类都从内建类object直接或者间接地继承。
在Python3里面,不存在这些问题了,默认都是新式类了。

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1-50、Python面试1-50题汇总
51、说说Python中闭包是什么?
52、read、readline和readlines的区别?
53、说说Python中with的用法?
54、Python中连接字符串用join还是+?
55、Python中search和match的区别?
56、说说Python中字符串大小写转换?
57、Python反转三位整数有几种方法?
58、说说Python中贪婪和非贪婪匹配?
59、说说Python中正负索引?
60、说说Python中切片是什么?

关注小猿公众号,每天学习一道题

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python新式类与经典类(旧式类)的区别
Python 函数和类
Java反射机制获取父类属性
python中isinstance()和type()的区别!
#import 与 #include的区别
[python] __new__() 和 __init__()的区别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服