在 Python 中,object
和 type
是非常重要的概念,它们与继承和类的分层结构密切相关。
1. object
类
object
是 Python 中所有类的基类。换句话说,它是所有类的最顶层父类。在 Python 3 中,所有用户定义的类都隐式继承自 object
,即使你没有显式地声明它。
示例:
class MyClass:
pass
# 等价于:
class MyClass(object):
pass
object
的作用:
-
提供了许多默认的方法,例如
__str__
、__repr__
、__hash__
等。 -
确保所有类都能统一地支持基本的 Python 对象操作。
检查类是否继承 object
:
print(isinstance(5, object)) # True
print(isinstance("hello", object)) # True
print(isinstance(MyClass, object)) # True
2. type
类
type
是一个非常特殊的类,它有两个主要用途:
-
作为类型检查工具:
type(obj)
返回对象的类型。 -
作为元类:
type
是创建所有类的类。可以说,type
是类的类,它负责实例化新类。
示例:
class MyClass:
pass
# 检查类的类型
print(type(MyClass)) # <class 'type'>
print(type(MyClass())) # <class '__main__.MyClass'>
# 每个类都是 type 的实例
print(isinstance(MyClass, type)) # True
print(type(type)) # <class 'type'>,type 是自己的实例
元类的概念:
在 Python 中,类的定义是由元类负责的。type
是默认的元类。通过 type
,可以动态地创建类,例如:
# 动态创建类
MyClass = type("MyClass", (object,), {"x": 5})
# 创建对象
obj = MyClass()
print(obj.x) # 5
3. object
和 type
在继承中的关系
在 Python 中,类的层级结构通常可以通过 __bases__
属性查看。object
是所有类的顶层父类,而 type
是所有类的元类。
示例:
print(object.__bases__) # (),object 没有直接父类
print(type.__bases__) # (<class 'object'>,),type 继承自 object
4. object
和 type
的方法
-
object
的方法:-
__new__
:创建对象时调用的特殊方法。 -
__init__
:初始化对象时调用的方法。 -
__str__
和__repr__
:定义对象的字符串表示。
-
-
type
的方法:-
type.__call__
:当类被实例化时调用。 -
type.__init__
:初始化类时调用。
-
5. object
和 type
的总结
-
object
是所有类的顶层父类,提供基本的对象行为。 -
type
是元类,负责创建所有类。type
本身也是一个类,并且继承自object
。
6. 描述器与 object
和 type
的关系
描述器的工作原理与类的层次结构紧密相关:
-
描述器的
__get__
、__set__
和__delete__
方法会被object
的默认行为调用。 -
由于所有类都继承自
object
,描述器的行为在所有类中都有一致的接口。