- 主要记录个人对Python内建函数的理解
- 会不定期修改补充
- 主要参看https://docs.python.org/3/library/functions.html
type()
type()函数本身是一个类,有两种调用方式
class type(object)
class type(name, bases, dict)
class type(object)
传入单个对象时,返回的是对象的类型,其作用跟object.__class__
方法一样。 但不建议用该函数检测对象的类型,更推荐使用isinstance()
来检测对象类型。具体为什么可以参考如下例子:
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
对于子类,type函数就不太行了。如果需要更深入理解,请参看python判断变量类型时,为什么不推荐使用type()方法 这个问题下的回答。
class type(name, bases, dict)
传入三个参数的时候,type返回一个新的type对象。如
X = type('X', (object,), dict(a=1))
X.__name__ # return 'X'
X.__bases__ # return (object,)
X.__dict__ # return 一个字典,其中有一项为 'a': 1
也就是可以通过传入名字,基类,字典来生成一个新的type对象。由此反推可以发现,传入一个参数的话,不止是返回对象的类型,其实也是生成了一个对象对应的type类型对象,也就是说
type(object).__name__
type(object).__bases__
type(object).__dict__
都是存在的,分别返回对象的名字,基类,以及所有的dict. 从而,如果我们需要打印出来该对象对应的类的名字,就用type(object).__name__
好啦。虽然其他地方没看出来有啥卵用