zoukankan      html  css  js  c++  java
  • 面向对象--进阶

    一,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)
    简单示例
  • 相关阅读:
    移动端a标签点击图片有阴影处理
    sublime vue 语法高亮插件安装
    mongodb 命令
    MongoDB给数据库创建用户
    windows32位系统 安装MongoDB
    ES6之主要知识点(十)Proxy
    ES6之主要知识点(九)Set和Map
    ES6之主要知识点(八)Symbol
    ES6之主要知识点(七)对象
    Ueditor 1.4.3 插入表格后无边框无颜色,不能正常显示
  • 原文地址:https://www.cnblogs.com/wangjun187197/p/9561563.html
Copyright © 2011-2022 走看看