大锤python日记(新式类和旧式类的比较)

30 阅读1分钟

在 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 类即可得到新式类的特性。