码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-08-30 20:38:21      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:打印   instance   形式   style   delattr   rom   import   bsp   def   

一.

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))

 

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

标签:打印   instance   形式   style   delattr   rom   import   bsp   def   

原文地址:https://www.cnblogs.com/SUIFAN/p/9562470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!