type和instance

130 阅读1分钟

isinstance() 与 type() 区别

  • type() 不会认为子类是一种父类类型,不考虑继承关系。
  • isinstance() 会认为子类是一种父类类型,考虑继承关系。
  • 如果要判断两个类型是否相同推荐使用 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函数

语法

  • type(object)
    • 返回对象类型
  • type(name, bases, dict)
    • name -- 类的名称。
    • bases -- 基类的元组。
    • dict -- 字典,类内定义的命名空间变量。
    • 返回新的类型对象(和通过class定义的类并无差别,事实上,在使用 class 定义类时,Python 解释器底层依然是用 type() 来创建这个类。)
#定义一个实例方法
def say(self):
    print("我要学 Python!")
#使用 type() 函数创建类
CLanguage = type("CLanguage",(object,),dict(say = say, name = "C语言中文网"))
#创建一个 CLanguage 实例对象
clangs = CLanguage()
#调用 say() 方法和 name 属性
clangs.say()
print(clangs.name)
>>> 我要学 Python!
>>> C语言中文网