一,issubclass / type / isinstance
issubclass : 检查第一个参数是否是第二个参数的派生类.
#issubclass
class Base(object): pass class Foo(Base): pass class Bar(Foo): pass print(issubclass(Bar,Base))
#True
type: 获取当前对象是由那个类创建.
#type class Foo(object): pass obj = Foo() print(obj,type(obj)) #获取当前对象是由那个类创建 if type(obj) == Foo: print('obj是Foo类型') #<__main__.Foo object at 0x00455950> <class '__main__.Foo'> #obj是Foo类型

class Foo(object): pass class Bar(object): pass def func(*args): foo_counter = 0 bar_counter = 0 for item in args: if type(item) == Foo: foo_counter += 1 elif type(item) == Bar: bar_counter += 1 return foo_counter,bar_counter result = func(Foo(),Bar(),Foo()) print(result) # (2 , 1)
isinstance:检查第一个参数(对象)是否是第二个参数(类及父类的实例).
#isinstance class Base(object): pass class Foo(Base): pass obj1 = Foo() print(isinstance(obj1,Foo)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 print(isinstance(obj1,Base)) # 检查第一个参数(对象)是否是第二个参数(类及父类)的实例。 obj2 = Base() print(isinstance(obj2,Foo)) print(isinstance(obj2,Base)) #True #True #False #True
二,方法和函数
称谓:
类,方法
外,函数
到底是方法还是函数?
对象.xxx -->xxx就是方法
类.xxx ---> xxx 就是函数
xxx ----> xxx就是函数

from types import MethodType,FunctionType def check(arg): """ 检查arg是方法还是函数? :param arg: :return: """ if isinstance(arg,MethodType): print('arg是一个方法') elif isinstence(arg,FunctionType): print('arg是一个函数') else: print('不知道是啥')
三,反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性.Python中一切事物皆对象.(都可以使用反射)
(一切皆对象,类本身也是一个对象)
getattr 根据字符串的形式,去对象中找成员.
hasattr 根据字符串的形式,去判断对象中是否有成员.
setattr 根据字符串的形式,动态的设置一个成员(在内存中)
delattr 根据字符串的形式,动态的删除一个成员(在内存中)

class Foo(object): country = "中国" def func(self): pass v = getattr(Foo,'func') # Foo.func # 根据字符串为参数,去类中寻找与之同名的成员。 print(v) obj = Foo() v = getattr(obj,"func") # obj.func # 根据字符串为参数,去对象中寻找与之同名的成员。 print(v)