Python之面向对象:多态、封装——第十六天

1、对多态的理解:多态和继承不分家,多态实际上是依附于继承的两种含义的,“改变”和”扩展“,多态就是继承的两层含义的一个具体实现机制。即:调用不同的类实例化对象下的相同方法,实现的过程不一样。
多态的具实例:以水的三种形态为例

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<0:
			print("%s温度太高变成了水蒸气"%self.name)

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

a=Water("水",28)
b=Ice("冰",-20)
c=Steam("蒸汽",2000)
		

2、封装:封装的意义在于隐藏,”封”指的封闭,“装”指的是把东西装进去,类的属性就好比东西,类就相当于封装东西的容器。

3、封装的三种层面:
(1)第一个层面:类就是一个麻袋,本身就是封装
(2)第二个层面:类中定义私有属性,只在内部使用,外部无法访问,这里要说到python中的两个约定(仅仅是约定而已,不做强行限制)

  • 类中属性以单下划线"_"开头的,就是被隐藏起来的,但是外部还是可以调用的,python中的约定没有那么严格
  • 类中属性以两个单下划线“__”开头的,外部调用会将其属性名改变。如__test=“123”,外部调用需要更名才可以访问到,名称格式为"_类名__test",可以用print(类名.dict)打印出来查看
    (3)第三个层面(真正意义上的封装):只能内部访问,外部不能访问。可以写一个内部方法(接口函数),然后通过外部调用该方法执行
class test:

    _a="hahaha"

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

  #接口函数
    def get_a(self):
        print(_a)
        
        
p=test("Mary",18)
p.get_a()

#输出结果:hahaha

你可能感兴趣的:(Python学习)