目录
描述
python的 type
函数有两个用法,当只有一个参数的时候,返回对象的类型。当有三个参数的时候返回一个类对象。
语法
type(object)
type(name, bases, dict)
用法
一个参数
type(object)
返回一个对象的类型,如:
In [1]: a = 10 In [2]: type(a) Out[2]: int
三个参数
tpye(name, bases, dict)
- name 类名
- bases 父类的元组
- dict 类的属性方法和值组成的键值对
返回一个类对象:
# 实例方法def instancetest(self): print("this is a instance method") # 类方法 @classmethod def classtest(cls): print("this is a class method") # 静态方法 @staticmethod def statictest(): print("this is a static method") # 创建类 test_property = { "name": "tom", "instancetest": instancetest, "classtest": classtest, "statictest": statictest} Test = type("Test", (), test_property) # 创建对象 test = Test() # 调用方法 print(test.name) test.instancetest() test.classtest() test.statictest()
运行结果:
tomthis is a instance methodthis is a class method this is a static method
使用help打印Test的详细信息:
class Test(builtins.object) | Methods defined here: | | instancetest(self) | # 实例方法 | | ---------------------------------------------------------------------- | Class methods defined here: | | classtest() from builtins.type | # 类方法 | | ---------------------------------------------------------------------- | Static methods defined here: | | statictest() | # 静态方法 | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined) | | ---------------------------------------------------------------------- | Data and other attributes defined here: | | name = 'tom'
可以看出我们创建了一个Test类,包含一个实例方法statictest,类方法classtest,静态方法statictest,和一个属性name = 'tom'。
type和isinstance
type不会认为子类是父类的类型,不会考虑继承关系。isinstance会任务子类是父类的类型,考虑继承关系。
Type和Object
type为对象的顶点,所有对象都创建自type。
object为类继承的顶点,所有类都继承自object。
python中万物皆对象,一个python对象可能拥有两个属性,__class__
和 __base__
,__class__
表示这个对象是谁创建的,__base__
表示一个类的父类是谁。
In [1]: object.__class__Out[1]: type In [2]: type.__base__ Out[2]: object
可以得出结论:
- type类继承自object
- object的对象创建自type