python 多态,封装,反射

一.多态
1.概念:不同类实例化得到的对象,调用同一方法,执行逻辑不同

2.指出对象如何通过它们共同的属性/动作来操作/访问,而无需考虑具体的类

3.表明动态/运行时绑定存在,允许重载及运行时确定

class H2O:
    def __init__(self,name,temperature):
        self.name=name
        self.temperature=temperature
    def turn_ice(self):
        if self.temperature<0:
            print('%s温度太低结冰了'%self.name)
        elif self.temperature>0 and self.temperature<100:
            print('%s变成水'%self.name)
        elif self.temperature>100:
            print('%s温度太高变成蒸汽了'%self.name)
def func(obj):   #一个统一的接口
    obj.turn_ice()

class water(H2O):
    pass
class ice(H2O):
    pass
class steam(H2O):
    pass

w1=water('水',25)
i1=ice('冰',-20)
s1=steam('蒸汽',1000)
w2=water('水',101)

#统一的接口,多种实现
func(w1)#水变成水
func(w2)#水温度太高变成蒸汽了
func(i1)#冰温度太低结冰了
func(s1)#蒸汽温度太高变成蒸汽了

二.封装
1.把数据/属性放进类/对象(装),隐藏起来(封)—明确区分内外,只在内部使用,外部无法访问

2.以’_'开头的变量都应是类内部/私有的(按约定不应在外部调用,但如果在外部调用,python没有实际的限制)

3.以’__‘开头的变量被python自动重命名为’_类名 __变量名’(仅限外部,在内部仍可直接使用)

class people:
    __planet='earth'
    def __init__(self,id,name,age,salary):
        self.name=name
        self.id=id
        self.age=age
        self.salary=salary
        print(self.__planet)   #内部可以直接调用

p1=people('123456','A',30,10000)
print(p1.__planet)   #报错,外部无法直接调用
print(p1._people__planet)   #不报错

4.真正的封装:明确区分内外(内部可直接使用,外部无法调用),内部的实现逻辑外部无法知晓,并未封装到内部的逻辑提供一个接口给外部使用(见面向对象进阶)

class people:
    __planet='earth'
    def __init__(self,id,name,age,salary):
        self.name=name
        self.id=id
        self.age=age
        self.salary=salary
        print(self.__planet)   #内部可以直接调用
    def get_planet(self):     #接口函数/访问函数
        print(self.__planet)
        
p1=people('123456','A',30,10000)
p1.get_planet()   #earth

三.反射(又称自省)
1.概念:程序可以访问/检测/修改它本身状态/行为的一种能力

2.4个可以实现反射的函数:hasattr/getattr/setattr/delattr(见python函数部分)(同样适用于类)

3.优点:可以事先定义好接口,接口只有在完成后才会真正执行,实现了即插即用,这其实是一种"后期绑定"(可以事先把主要逻辑写好—只定义接口,后期再去实现接口功能)
在这里插入图片描述
上一段代码被修改后无需修改下一段代码

四.动态导入模块
1.m=__import __(module_name_str) 在这里插入图片描述
获得的只是最顶层的模块:
在这里插入图片描述
在这里插入图片描述
会执行模块t,但获得的是模块m1
在这里插入图片描述
2.importlib模块:

import importlib
import.import_module(module_name_str)

在这里插入图片描述
获得导入的模块:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值