类型判断
issubclass
判断类classA是否是类classB的子类
# issubclass(classA, classB) 判断类classA是否是类classB的子类,
# 包括A和B有多层的继承关系也可判断,例如类B是类C的子类,那么类A也是类C的子类。
# issubclass(classA, (classB,classC,classD)) 判断类A是否是类B,C,D中任何一个类的子类,只要有一个成立则返回True
# def issubclass(x, A_tuple): # real signature unknown; restored from __doc__
# """
# Return whether 'cls' is a derived from another class or is the same class.
#
# A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
# check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
# or ...`` etc.
# """
class Base(object):
pass
class Foo1(Base):
pass
class Foo2(Foo1):
pass
class Foo3(Foo2):
pass
class Other(object):
pass
ret1 = issubclass(Foo3, Base)
print(ret1)
ret2 = issubclass(Foo3, Foo1)
print(ret2)
ret3 = issubclass(Foo3, Foo2)
print(ret3)
ret4 = issubclass(Foo3, object)
print(ret4)
ret5 = issubclass(Foo3, Other)
print(ret5)
ret6 = issubclass(Foo3, (str, list, tuple, dict, set))
print(ret6)
ret7 = issubclass(Foo3, (str, list, tuple, dict, set, Base))
print(ret7)
obj1 = Foo3()
#True
#True
#True
#True
#False
#False
#True
type
获取指定对象由那个类创建 | 获取指定对象的类型
# 获取指定对象由那个类创建 | 获取指定对象的类型
"""
class Foo(object):
pass
obj1 = Foo()
if type(obj1) == Foo:
print('obj是Foo类型')
"""
from types import FunctionType, MethodType
class Foo1(object):
def __iter__(self, name):
self.name = name
def func1(self):
print(self.name)
@staticmethod
def func2():
print('staticmethod')
def func():
pass
def counter(*args):
count_func = 0
count_meyhod = 0
for item in args:
if type(item) == FunctionType:
count_func += 1
elif type(item) == MethodType:
count_meyhod += 1
return count_func, count_meyhod
result = counter(Foo1().func1, Foo1().func2, func)
print(result)
#(2, 1)
isinstance
判断一个对象是否是指定的类型或者指定类型的父类创建的,接收两个参数,第一个参数为对象,第二个参数为类或者类组成的元组
# 判断一个对象是否是指定的类型或者指定类型的父类创建的,接收两个参数,第一个参数为对象,第二个参数为类或者类组成的元组
# s = 'abc'
# print(isinstance(s, str))
# lst = [1, 2, 3]
# print(isinstance(lst, (list, str, dict)))
class Base(object):
pass
class Foo(Base):
pass
class Foo1(Foo):
pass
obj1 = Foo1()
print(isinstance(obj1, Foo))
print(isinstance(obj1, Foo1))
print(isinstance(obj1, Base))
print(isinstance(obj1, object))
print(isinstance(obj1, list))
print(isinstance(obj1, (list, str, dict)))
print(isinstance(obj1, (list, str, Foo)))
#True
#True
#True
#True
#False
#False
#True