在Python中,object
是所有类的基类,也就是说,每个类默认都继承自object
类,这个特性从Python 3.0开始引入,而在Python 2.x版本中,我们通常使用object
来创建新型类(new-style class)。
object
的基本用法
当我们定义一个类而不显式指定其基类时,object
就作为默认的基类:
class MyClass: pass
等价于:
class MyClass(object): pass
在Python 3中,所有的类都是object
类的子类,这意味着它们继承了一些基本的方法,如__init__
, __str__
, __repr__
等。
object
的特殊方法
object
类定义了一些特殊方法,这些方法可以被任何子类覆盖以改变其行为。
1、__init__(self)
: 构造器,当对象被创建时自动调用。
2、__str__(self)
: 返回对象的可打印字符串表示形式。
3、__repr__(self)
: 返回对象的字符串表示形式,该形式尽可能具有“用户友好性”。
4、__del__(self)
: 析构器,当对象被销毁时自动调用。
自定义方法与属性
虽然object
提供了一些基础功能,但通常我们会在自定义的类中添加更多的方法和属性。
class Person(object): def __init__(self, name, age): self.name = name self.age = age def greet(self): return f"Hello, my name is {self.name} and I'm {self.age} years old."
在这个例子中,Person
类继承自object
并添加了两个属性(name
和age
)和一个方法(greet
)。
多重继承
Python支持多重继承,这意味着一个类可以从多个基类继承属性和方法,在这种情况下,object
也可以作为其中一个基类:
class Speaker: def speak(self): pass class Person(Speaker, object): Person 的定义...
这里,Person
类同时继承了Speaker
和object
的属性和方法。
相关问题与解答
Q1: 为什么Python中的每个类都默认继承自object
?
A1: 这是为了统一类的行为,并确保所有类都有一致的方法解析顺序(MRO)。
Q2: 在Python 2.x中,不继承自object
的类被称为什么?
A2: 不继承自object
的类被称为旧式类(old-style class)。
Q3: 能否在Python中创建一个不继承自object
的类?
A3: 在Python 3中不行,每个类必须显式或隐式地继承自object
,在Python 2.x中,可以创建旧式类。
Q4: 如果一个类有多个基类,那么方法解析顺序是怎样的?
A4: Python使用C3线性化算法来确定方法解析顺序(MRO),这是一种保证每个类只出现一次的算法,并且子类总是在父类之前。
评论(0)