1、类的区别
经典类:在Python2中,class Person:
不会继承object
,这样的类叫做经典类(它叫经典类,不是因为它经典,而是因为它比较老)
新式类:在Python3中,Python会默认继承object
类(一切皆对象)
class Person
就相当于Python2中的 class Person(object) #新式类
另外,Python3中没有经典类。所有类都是新式类,无需显式继承 object
。
例如,
Python2:
class Person(): #经典类
pass
class Teacher(object): #新式类
pass
Python3:
class Person():
pass
class Teacher(object):
pass
#这两个都是新式类
2、继承的区别
Python2经典类查找使用的深度优先。新式类会根据不同情况采用深度优先或广度优先。Python3中没有了经典类,查找方法跟Python2的新式类一样。
例如,
Python2:
class Person():
def fun(self):
print "我是一个人"
class Coder():
def fun(self):
print "我是一个程序员"
class Teacher(Person):
pass
class Levi(Teacher,Coder):
pass
a=Levi()
a.fun()# 输出"我是一个人"
改成新式类,代码如下,
class Person(object):
def fun(self):
print "我是一个人"
class Coder(Person):
def fun(self):
print "我是一个程序员"
class Teacher(Person):
pass
class Levi(Teacher,Coder):
pass
a=Levi()
a.fun()# 输出 "我是一个程序员"
Python3:
class Person(object):
def fun(self):
print("我是一个人")
class Coder(Person):
def fun(self):
print("我是一个程序员")
class Teacher(Person):
pass
class Levi(Teacher,Coder):
pass
a=Levi()
a.fun()# 输出 "我是一个程序员"
3、super()
的变化
Python 2 的super()
函数的调用需要显式传递当前类和实例对象。
class BaseClass(object):
def __init__(self):
print("BaseClass init")
class DerivedClass(BaseClass):
def __init__(self):
super(DerivedClass, self).__init__()
print("DerivedClass init")
Python 3 的super()
调用时不再需要显式传递类和实例,简化了代码。
class BaseClass:
def __init__(self):
print("BaseClass init")
class DerivedClass(BaseClass):
def __init__(self):
super().__init__()
print("DerivedClass init")
4、其它区别
1)Python3中迭代器的next()
方法改名为__next__()
,并增加内置函数next()
,用以调用迭代器的__next__()
方法。
2)Python3增加了@abstractmethod
和 @abstractproperty
两个 decorator,编写抽象方法(属性)更加方便。