面向对象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}
原文地址:https://www.cnblogs.com/binyuanxiang/p/11711261.html