面向对象之多态、封装(初级)

一、多态

多态的概念指出了对象如何通过他们共同的属性和动作来操作及访问,而不需要考虑他们具体的类。

多态表明了动态(又名,运行时)绑定的存在,允许重载及运行时类型确定和验证。

多态就是类的改变和扩展的一个具体的实现机制

python中的标准类型就是多态概念的一个很好的示范

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)

class Water(H2O):
    pass
class Ice(H2O):
    pass
class Steam(H2O):
    pass

w1=Water('',25)

i1=Ice('',-20)

s1=Steam('蒸汽',3000)

#不同的类产生实例调用基类相同的功能体现出多态
w1.turn_ice()
i1.turn_ice()
s1.turn_ice()

#模拟len()方法
def func(obj):
    obj.turn_ice()

func(w1)#w1.turn_ice()
func(i1)#i1.turn_ice()

二、封装

是一种思想,封就是把东西隐藏起来,装就是类定义属性和方法

真正意义的封装:明确区分内外,内部的实现逻辑,外部无法知晓,并且为封装到内部的逻辑提供一个访问接口给外部使用

定义类的属性和方法的过程就是装的过程

class People:
    __star='earth'#前面加 _ 是一种约定,调的时候是 _ 开头的,则此属性不应该在外部被使用,就是隐藏的意思
                  #__开头python内部会重命名成 _People__star,并且可以调用到
    def __init__(self,id,name,age,salary):
        self.id=id
        self.name=name
        self.age=age
        self.salary=salary

    def get_id(self):
        print('我是私有方法啊,我找到的id是[%s]'%self.id)

    #接口函数
    def get_star(self):
        print(self.__star)

p1=People('23423423','alex',18,100000)
p1.get_id()
p1.get_star()#earth
原文地址:https://www.cnblogs.com/happyfei/p/9598574.html