说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的内置函数 type() 传入一个对象的字面量或者标识符,将返回此对象的类型。推荐使用 isinstance() 内置函数来检测对象的类型,因为它会考虑子类的情况。
以下是 type() 的一些使用示例:
type(1) # <class 'int'> 以下简化
type('hello') # str
type(True) # bool
type(()) # tuple
type([]) # list
type(None) # NoneType
class Foo:
a = 0
foo = Foo()
type(foo)
# <class '__main__.Foo'>
type(dict) # type
type(type(1)) # type
type 的类型还是 type。
它有两种使用形式:
class type(object)
class type(name, bases, dict, **kwds)
第一种形式传入一个参数时,返回 object 的类型。 返回值是一个 type 对象,通常与 object.__class__
所返回的对象相同。
推荐使用 isinstance() 内置函数来检测对象的类型,因为它会考虑子类的情况。
传入三个参数时,返回一个新的 type 对象。 用来创建类。
这在本质上是 class 语句的一种动态形式:
__name__
属性;__bases__
属性;如果为空则会添加所有类的终极基类 object。__dict__
属性之前可能会被拷贝或包装。下面两条语句会创建相同的 type 对象:
class X:
a = 1
# 同上操作
X = type('X', (), dict(a=1))
类型对象表示各种对象类型。 对象的类型可通过内置函数 type() 来获取。 类型没有特殊的操作。 标准库模块 types 定义了所有标准内置类型的名称。类型以这样的写法来表示: <class 'int'>
。
提供给三参数形式的关键字参数会被传递给适当的元类机制 (通常为 __init_subclass__())
,相当于类定义中关键字 (除了 metaclass) 的行为方式。
可以利用 type() 传入三个参数的形式快速定义一个类:
o1 = type('X', (object,), dict(a='Foo', b=12))
print(type(o1))
print(vars(o1))
class test:
a = 'Foo'
b = 12
o2 = type('Y', (test,), dict(a='Foo', b=12))
print(type(o2))
print(vars(o2))
输出:
<class 'type'>
{'a': 'Foo', 'b': 12, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'X' objects>, '__weakref__': <attribute '__weakref__' of 'X' objects>, '__doc__': None}
<class 'type'>
{'a': 'Foo', 'b': 12, '__module__': '__main__', '__doc__': None}
在程序中,我们使用了 Python vars() 函数,该函数返回 __dict__
属性,它用于存储对象的可写属性。
如果需要,可以轻松更改这些属性。例如,如果需要将 o1 的 __name__
属性更改为 “Z”,可使用:o1.__name = 'Z'
。
在 3.6 版更改: type 的子类如果未重载 type.__new__
,将不再能使用一个参数的形式来获取对象的类型。
更新时间:March 26, 2022, 6:09 p.m. 标签:python type 数据类型