zoukankan      html  css  js  c++  java
  • 面向对象4

    一、绑定方法和非绑定方法

    1. 对象的绑定方法

      1. 定义

            在类中没有被任何装饰器修饰的方法,专门为对象定制

          2. 调用方式

        • 对象调用时,将自己作为第一个参数传入

        • 类调用时,第一个参数手动传值

     

      2. 类的绑定方法

      1. 定义

            类中使用@classmethod修饰的方法,专门为类定制

          2. 调用方式

        • 对象调用时,默认第一个参数是这个对象的类

        • 类调用时,将自己作为第一个参数传入

     

      3. 非绑定方法

      1. 定义

            类中使用@staticmethod修饰的方法,和普通函数一样,不会自动传值。

          2. 调用方式

            '.' + 函数名调用

     

    二、isinstance和type

    1. 区别

        type() 不会认为子类是一种父类类型,isinstance() 会认为子类是一种父类类型

      2. 代码

    class Foo(object):
        pass
    
    
    class Bar(Foo):
        pass
    
    
    print(type(Foo()) == Foo)
    print(type(Bar()) == Foo)
    print(isinstance(Bar(),Foo))
    
    
    输出
    True
    False
    True

    三、issubclass

    1. 作用

        判断一个类是否是另一个类的子类

      2. 代码

    class Parent:
      pass
        
        
    class Sub(Parent):
      pass
        
        
    print(issubclass(Sub, Parent))
    print(issubclass(Parent, object))
        
        
    输出
    True
    True

    四、反射

    1. 定义

        通过字符串操作类或对象的属性,本质就是使用内置函数

      2. 反射的四个内置函数

      • hasattr:判断一个方法是否存在于这个类中

      • getattr:根据字符串获取对象里对应方法的内存地址,加括号即可调用

      • setattr:将外部的一个函数绑定到实例中

      • delattr:删除一个实例或类中的方法

      3. 使用方法

    class People:
        country = 'China'
    
        def __init__(self, name):
            self.name = name
    
        def eat(self):
            print('%s is eating' % self.name)
    
    
    peo1 = People('byx')
    
    print(hasattr(peo1, 'eat'))
    
    print(getattr(peo1, 'eat'))
    print(getattr(peo1, 'xxxxx', None))
    
    setattr(peo1, 'age', 18)
    print(peo1.age)
    print(peo1.__dict__)
    
    delattr(peo1, 'name')  # del peo1.name
    print(peo1.__dict__)
    
    
    输出
    True
    <bound method People.eat of <__main__.People object at 0x00000299755652E8>>
    None
    18
    {'name': 'byx', 'age': 18}
    {'age': 18}
  • 相关阅读:
    【C++】链表回环检测
    【C++】满二叉树问题
    【C++】约瑟夫环(数组+链表)
    【C++】子序列匹配问题
    【OJ】抓牛问题
    【C++】基于邻接矩阵的图的深度优先遍历(DFS)和广度优先遍历(BFS)
    【C++】二叉树的构建、前序遍历、中序遍历
    范进中Nature——儒林外史新义
    VMware Workstation下ubuntu虚拟机无法上网连不上网络解决
    儒林外史人物——娄三、娄四公子
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/11711261.html
Copyright © 2011-2022 走看看