在 Python 中,可以使用内置的 type
函数来获取一个对象所对应的类。使用 mro
方法可以查看一个类的所有祖先 (包括自己)。例如,NoneType
是 None
的类型,bool
是 int
的子类,这意味着布尔值实际上是整数的特殊表现形式,True
等价于 1,False
等价于 0。其他基本数据类型如 int
、float
、complex
和 str
也都继承自 object
。
type(False).mro()
[bool, int, object]
type(2).mro()
[int, object]
type(3.14).mro()
[float, object]
type(1 + 2j).mro()
[complex, object]
type("Hello world!").mro()
[str, object]
type(None).mro()
[NoneType, object]
type([1, 2, 3]).mro() # 列表 list
[list, object]
type((1, 2, 3)).mro() # 元组 tuple
[tuple, object]
type(range(3)).mro() # 范围 range
[range, object]
type({"a": 1, "b": 2}).mro() # 字典 dict
[dict, object]
type({1, 2, 3}).mro() # 集合 set
[set, object]
import math
type(math).mro()
[module, object]
函数是 function 类的对象,这意味着函数本身可以像其他对象一样被操作。你可以将一个函数赋值给一个变量,从而通过这个变量来调用该函数。此外,函数还可以作为参数传递给其他函数,允许你在函数内部动态地处理和调用其他函数,这使得高阶函数的实现成为可能。函数还可以作为返回值返回,这种特性使得你可以创建工厂函数或闭包等高级编程模式。
def to_upper_case(text: str) -> str:
return text.upper()
to_upper_case("Hello world!")
'HELLO WORLD!'
upper = to_upper_case
upper("Hello world!")
'HELLO WORLD!'
type(to_upper_case).mro()
[function, object]
在 Python 中,一切皆对象,包括类本身。类可以用来创建对象,而这些类本身也是对象,它们是 type
类的实例。事实上,所有的类都是 type
的实例。而更有趣的是,type
自身也是一个对象,属于 type
类。类是对象,类的实例也是对象,而 type
是所有类的元类。
class Dog:
def bark(self):
return "Woof!"
d = Dog()
d.bark()
'Woof!'
type(d).mro()
[__main__.Dog, object]
print(type(Dog))
<class'type'>
print(type(type(Dog)))
<class'type'>