在 Python 2.x 中,所有类默认都是旧式类。而在 Python 3.x 中,所有类默认都是新式类。
旧式类和新式类的区别主要体现在多重继承、属性访问以及特殊方法等方面。
在新式类中,一个类可以直接继承自内置类型(比如 list、dict 等),同时也支持使用 super() 函数调用父类方法,还能够使用 slots 属性限制实例属性的数量,以及使用 getattribute() 方法控制属性访问等高级特性。
而在旧式类中,这些特性都不被完全支持。因此,在 Python 3.x 中建议使用新式类。
下面是一份示例代码,演示了旧式类和新式类之间的差异。
# 定义一个旧式类
class OldStyle:
def greet(self):
print("Hello, I'm an old-style class")
# 定义一个新式类
class NewStyle(object):
def greet(self):
print("Hello, I'm a new-style class")
# 创建旧式类的实例
old = OldStyle()
# 调用旧式类的方法
old.greet() # "Hello, I'm an old-style class"
# 创建新式类的实例
new = NewStyle()
# 调用新式类的方法
new.greet() # "Hello, I'm a new-style class"
从上述代码可以看出,旧式类是通过定义一个普通的类来创建的,而新式类则是通过继承自 object
类来创建的。
此外,在 Python 3.x 中,所有的类都建议继承自 object
类,以便获得新式类的特性。因此,可以将上述代码中的 OldStyle
类改写成新式类,如下所示:
# 定义一个新式类
class NewStyle(object):
def greet(self):
print("Hello, I'm a new-style class")
# 创建新式类的实例
new = NewStyle()
# 调用新式类的方法
new.greet() # "Hello, I'm a new-style class"
在上述代码中,我们只需要让 NewStyle
类继承自 object
类即可得到新式类的特性。