python 面向对象之路 方法和函数 反射

一.

isinstance(检查第一个参数是否是第二个参数的 子子孙孙类)

  
            class Base(object):
                pass

            class Foo(Base):
                pass

            obj1 = Foo()
            print(isinstance(obj1,Foo))
print(isinstance(obj1,Base))

issubclass(检查的一个参数(对象) 是否是第二个参数(类及父类)的实例)

class Base(object):
    pass

class Foo(Base):
    pass

class Bar(Foo):
    pass

print(issubclass(Bar, Base))

type(获取当前对象是由那个类创建.)

class Foo(object):
    pass

obj = Foo()

print(obj,type(obj)) # 获取当前对象是由那个类创建。
if type(obj) == Foo:
    print('obj是Foo类型')

二.方法和函数

称谓:

类.  就是方法

外面的,  就是函数

对象.dag    就是方法

类.aaa   就是函数

xxx   也是函数

打印查看:

function

method

from types import MethodType,FunctionType
def check(arg):
    if isinstance(arg,MethodType):
        print('arg是方法')
    elif isinstance(arg,FunctionType):  #检查arg是方法还是函数
        print('arg是个函数')
    else:
        print('不知道是什么')

三.反射

getattr # 根据字符串的形式,去对象中找成员。
hasattr # 根据字符串的形式,去判断对象中是否有成员。 setattr # 根据字符串的形式,动态的设置一个成员(内存) delattr # 根据字符串的形式,动态的删除一个成员(内存)

总结:

v = getattr(obj,'func')  根据字符串为参数(第二个参数),去对象(第一个参数)中寻找与之同名的成员。

拓展:见过的啥后面加() ?

类()

对象()

函数()

方法()

以上都可以被调用

示例

def func():
    pass

class Foo(object): def __call__(self, *args, **kwargs): pass def func(self): pass
obj
= Foo() print(callable(func)) print(callable(Foo)) print(callable(obj)) print(callable(obj.func))

猜你喜欢

转载自www.cnblogs.com/SUIFAN/p/9562470.html
今日推荐