多态:
对象如何通过他们共同的属性和动作来操作和访问,而不用考虑他们的类,反应在执行时候。
python中一切皆对象,不同的对象调用相同的方法,获得结果。比如len可以计算列表长度,字符串长度。len(str1)-----> str1.__len__()
len(list)----->list.__len__()
所以,都是调用对象的方法,是面向对象。那么,他们调用的都是相同的属性,没考虑他们是什么,
为什么这样呢?因为继承了同一个父类。
class temporater(h2o):class h2o():
def __init__(self,name, temperature):
self.name = name
self.temperature = temperature
def turn_into(self):
if self.temperature < 0:
print("这是冰 %s " %self.name)
if self.temperature >= 0:
print("这是水 %s " %self.name)
if self.temperature > 100:
print("这是水蒸气" %s, self.name)
class water(h2o):
pass
class ice(h2o):
pass
pass
w1 = water("水1",30)
w1.turn_into()
封装
约定1:任何以单下划线开头的名字都应该是内部的,私有的,外部不能用。外部就是类外面的。约定2:双下划线开头,被隐藏,外部不能直接调用,因为做了重命名的操作,变成了 ._class(类名)__func
第一层:类就是封装
第二层:类中定义私有的,只在类的内部使用,外部无法访问。
第三层:明确区分内外,外部不能访问,内部可以访问。可以通过内部调用,为外部提供了一个接口。
称为接口函数或者访问函数。
#曲线救国的方式:
class xx:
def __xx:
pass
def get_id(self): #用内部去调被封装的属性 self就是代表自己
print(self.__xx)
y = class()
y.get_id()
总结,class中不想让外面调用或者访问的,就封装起来,但是内部可以提供一个接口,里面有用封装数据运算的函数;
被频繁使用的可以通过这个接口函数去访问。
这个数据要不要被封装,一定要看这个数据会不会被频繁的直接访问,不能滥用。