zoukankan      html  css  js  c++  java
  • 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))
  • 相关阅读:
    全民医疗
    SpringMVC
    Mybatis 缓存策略
    不要追涨杀跌
    我只认比特币
    ETH反思
    世界是熵增的
    切片最好还是传引用
    rxgo示例
    11月份的计划
  • 原文地址:https://www.cnblogs.com/SUIFAN/p/9562470.html
Copyright © 2011-2022 走看看