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))
  • 相关阅读:
    webpack常用插件及作用
    函数柯里化
    防抖和节流
    实现深拷贝
    实现new操作符
    关于js中断ajax请求
    从输入 URL 到页面加载完成,发生了什么?
    vue路由传参params和query的区别
    input输入框限制(座机,手机号码)
    判断当前页面是不是用户正在浏览的页面
  • 原文地址:https://www.cnblogs.com/SUIFAN/p/9562470.html
Copyright © 2011-2022 走看看