#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/7/12 14:50 # @Author : 大坏男孩 # @File : day7_面向对象特性.py # @Software: PyCharm # @license : Copyright(C), 未来集团有限公司 # @Contact : [email protected] """ 面向对象的特性: 继承:1、在python里,面向对象的继承,叫多继承 2、当子类继承父类后,子类调用属性时,先找自己的属性字典; 如果没有,再找父类的属性字典,父类没有就报错 3、MRO继承顺序:广度优先。简单来说是从左到右。 通过 子类.mro 查看继承顺序 4、如果类没有继承父类,默认继承object类 多态:不同的对象调用相同的方法产生不同的结果 封装:私有变量 -->格式1:_变量名 协议:当变量定义为私有变量时,不应该直接去访问它 -->格式2:__变量名 私有变量储存在属性字典时,会在变量名前拼接上 _类名 储存结果是 _类名__变量名 私有函数 -->格式:__函数名 1、把相似的类、相同的代码、相同的函数或者重复的代码,写成一个函数或者类 2、把类的所有属性声明为私有属性,提供一个接口给访问者,访问者通过这个接口来访问类当中的属性 """ class I(): jiayou = "加油" def add(self): print("我是我") class You(I): # jiayou = "come on" def add(self): print("你是你") print(You.jiayou) You.add(666) class A(): # A默认继承object类,等效于class A(object) def test(self): print("我是A") class B(): pass class C(A): def test(self): print("我是C") class D(B): pass class E(C): def test(self): print("我是E") class F(D, E): pass class G(E): pass class I(E): pass class H(F, I, G): pass # 打印继承顺序,返回列表 print(H.mro()) # 多态:不同的对象调用相同的方法产生不同的结果 class H2O: def __init__(self,name,temperature): self.name = name self.temperature = temperature def turn_ice(self): if self.temperature < 0: print("{}温度太低结冰".format(self.name)) elif self.temperature in range(1,100): print("{}没有任何变化".format(self.name)) else: print("{}温度太高变为水蒸气".format(self.name)) class Water(H2O): pass class Ice(H2O): pass class Steam(H2O): pass w1 = Water("水",25) i1 = Ice("水",-20) s1 = Steam("水",666) w1.turn_ice() i1.turn_ice() s1.turn_ice() # 私有变量和私有函数 class Sum(): def __init__(self,value): self.__value = value def __add(self,x): return x + self.__value def network(self,x): """接口--访问者可以通过这个接口来访问类中的属性""" data = self.__add(x) return data 和 = Sum(66) # print(和.__dict__) if __name__ == "__main__": n = Sum(30) print(n.network(5)) # print(__name__) class NameGood: __a = 666666 print(__a) # 打印NameGood类的属性字典 print(NameGood.__dict__) # 调试程序: if __name__ == "__main__": # 打印NameGood类的私有变量__a print(NameGood._NameGood__a) # 新建一个对象namegood,没有参数 namegood = NameGood() # 打印对象namegood的属性字典 print(namegood.__dict__) # print(namegood.__a)