1.继承
1.两层意思
改变和扩展(详细看随笔继承和组合)
2.多态(体现在运行时的状态)
1.不同的类可以调用相同的方法,得到不同的结果
2.实际上是继承的一种体现机制
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)
if self.temperature>100:
print('温度太高,变成【%s】' %(self.name))
if self.temperature>=0 and self.temperature<=100:
print('温度适中,变成【%s】' %self.name)
class water(H2o):
pass
class ice(H2o):
pass
class Steam(H2o):
pass
w1=water('water',46)
i1=ice('ice',-12)
s=Steam('stream',199)
w1.turn_ice() # 温度适中,变成【water】
i1.turn_ice() # 温度太低,变成【ice】
s.turn_ice() #温度太高,变成【stream】
3.封装
1.抛开面向对象,你单独想什么是装,装就是拿一个麻袋,把小猫, 小狗等一起装进麻袋 ,在面向对象中,
这个麻袋就是你的类或对象,类或对象这两个麻袋 装了数据属性和函数属性,那么对于类或对象来说,封的概念代表隐藏
2.两种方法隐藏
1.在前面加 (_) (实际上是一种约定,还可以访问,但程序员知道访问这个不对)
2.在前面加(__) (实际上是字符串拼接)
class Peoson:
_star='earth'
def __init__(self,name,age):
self._name=name
self.__age=age
p1=Peoson('lujiacheng',19)
print(p1._star) #earth
print(p1._name) #lujiacheng
print(p1._Peoson__age) #19 实际上是拼接
3.第三层次的封装:区分内外(利用第二层次的封装),外部没法访问,只在内部使用, 外部要访问,可定义一个接口(即函数),
供外部访问 (但设计时要充分考虑数据是否要封装,不然接口很多,所以不能乱用封装)