python 16 内置方法、反射

day 16 内置方法、反射

复习

  1. 继承

    1. 类是用来解决对象之间冗余问题的
    2. 继承就是用来解决类与类之间冗余问题的
  2. 先抽象,再继承

    对象——>类——>父类

  3. 经典类与新式类

  4. 属性查找

    1. 在单继承背景下,从子类依次往上去寻找
    2. 多继承中就近原则一条分支一条分支的去找

    经典类:深度优先

    新式类:广度优先

  5. c3算法——>mro列表

    以属性查找发起者所在类的mro列表为准

  6. 派生

    在子类派生的新方法中如何重用父类的功能

    方式一:父类.函数(),与继承无关

    方式二:super().属性,严格依赖继承

    ​ super()对象会参照属性查找发起者的mro列表,去当前类的下一个类中找属性

  7. 绑定方法与非绑定方法

    1. 绑定方法:谁来调就自动传参

      1. 绑定给对象:默认绑定给对象
      2. 绑定给类:给函数加classmethod装饰器
  8. 隐藏属性

    __开头的属性会隐藏起来:

    1. 并不真的隐藏,只是语法意义的变形
    2. 该隐藏只在类顶一阶段,扫描语法时就会发生变形,类定义之后__开头的属性不会变
    3. 该隐藏对外不对内
    4. 可以防止子类覆盖父类的某个属性

    隐藏数据属性:开接口,在内内部定义方法查看修改删除隐藏属性

    class People:
        def __init__(self, name):
            self.__name = name
    
        @property
        def name(self):
            return self.__name
    
        @name.setter
        def name(self, v):
            self.__name = v
    
        @name.deleter
        def name(self):
            del self.__name
            print('已经删除')
    
    
    obj = People('lem')
    print(obj.name)
    obj.name = 'lam'
    print(obj.name)
    del obj.name
    
    ========>
    lem
    lam
    已经删除
    

    隐藏功能属性

  9. 继承表达的关系:is-a

内置方法

__str__

class People:
    def __init__(self,name,age):
        self.name = name    
        self.age = age
        
    def __str__(self):  # 打印对象时自动触发执行,将返回值当做打印结果
        return self.name  # 必须返回str类型的值
   
obj = People('lem', 18)
print(obj)
==========>
lem

__del__

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.f = open('a.txt','wb')

    def __del__(self):  # 删除对象时执行,程序运行结束也会执行
        # 回收系统资源
        self.f.close()
        print('回收系统资源')


obj = People('lem', 18)
del obj
print('=====>end')

isinstance(obj,class)

用来判断obj是否是class的实例,可以用来判断数据类型

issunclass(class,object)

用来判断class是否是object的子类

反射

反射:通过字符串来操作属性

hasattr:属性是否存在

getattr:获取属性

setattr:设置属性

delattr:删除属性

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def func(self):
        print('=====>',self.name, self.age)

obj = People('lem', 18)

print(hasattr(obj, 'name'))  # obj.name
print(getattr(obj, 'name'))  # obj.name

f = getattr(obj, 'func')
f()


setattr(obj,'gender','male') # obj.gender='male'
print(obj.gender)

delattr(obj,'name')
print(obj.__dict__)
posted @ 2021-04-26 15:34  橘丶阳菜  阅读(42)  评论(0编辑  收藏  举报