day7_面向对象特性

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/7/12 14:50
# @Author  : 大坏男孩
# @File    : day7_面向对象特性.py
# @Software: PyCharm
# @license : Copyright(C), 未来集团有限公司
# @Contact : 110@163.com

"""
面向对象的特性:
    继承: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)

  

一行代码一行诗
原文地址:https://www.cnblogs.com/huainanhai/p/11185552.html