__Python 面向对象

"""
面向对象:
1. 概念:把具有共同属性、共同方法(函数)的对象进行归纳,相同代码写到同一个class中(封装)
2. 作用:代码复用
3. 特点:封装、继承、多态
       3.1 封装:定义一个类
       3.2 继承:子类可以有父类的属性和方法,子类不用重写定义,代码复用
       3.3 多态:同一段代码因为传入参数不同,导致结果也不同
"""

class Animal(object):

    # 类属性:所有实例化的对象的“全局变量”
    count = 0 # Animal.count or animal.count
    __height = 10  #私有类属性

    def __init__(self, name):
        # 初始化函数:实例化对象时自动执行,实例属性一般定义在这里
        self.name = name # 实例属性
        self.age = 1
        self.__weight = 0 # 私有属性
        Animal.count += 1  # 自增类属性  用于计数
    def __siyouFunction(self):
        print('这是私有方法,类外不能调用')
        # 但是在类定义内部,可以访问私有属性或私有方法
        self.__weight = 10

    # def get_weight(self):
    #     self.__siyouFunction()
    #     # 这是专门获取私有属性的方法  建立一个函数以使用私有属性
    #     return self.__weight

    def __str__(self):
        # print(对象) 会自动调用本函数
        return '只能返回字符串'

    def __del__(self):
        # python解释器在结束执行之前会自动执行删除类对象的动作
        print('在删除时,额外增加功能')

    # 实例方法
    def myFunction(self):
        # self就是实例对象
        return '这就是一个实例方法,默认必带self参数'

    # 类方法:进行操作类属性
    @classmethod
    def clsFuncion(cls):
        # cls是类
        return '默认必带cls参数'    #常用于计数等

    # 静态方法:和类中的属性、方法都没啥关系
    # 代码玩家自己强行觉得应该放在这个类中
    @staticmethod
    def staticFounction():
        return '不带self,不带cls参数'


class BigDog(Animal):
    def run(self):
        print('大狗跑')

class SmallDog(Animal):
    def run(self):
        print('小狗跑')

class SuperDog(SmallDog, BigDog):
    # 继承链:【只】在SuperDog看来,SmallD是爸爸,BigD是爷爷,Animal是太爷爷
    # 多继承时,子类执行同名函数时,如果没有重写,会优先执行最左边的父类
    def __init__(self, name, color):

        # todo 调用父类的函数
        # 调用 SmallDog的 初始化 函数
        # 重写init初始化函数的同时,增加额外功能
        # 本质:父类的该函数执行,同时,再增加点功能
        # 三种方法:
        SmallDog.__init__(self, name=name)   #直接调用   todo 父类 .函数(self,参数)
        super(SuperDog, self).__init__(name=name) # 作用同上  todo super(本身子类,self).函数(参数)
        super().__init__(name=name)  # 作用同上
        #todo  都是调用SuperDog的父类SmallDog的函数

        # todo 调用指定的祖先类的函数
        # 调用 BigDog的 初始化 函数
        BigDog.__init__(self, name=name)
        super(SmallDog, self).__init__(name=name) # 作用同上
        self.color = color

    def run(self):
        # 重写父类方法                       todo  直接覆写  同名方法
        print('超级狗起飞了')
        # SmallDog.run(self)


if __name__ == '__main__':
    SuperDog(name='hahah', color='彩条').run() # 执行的是SmallDog.run()

    print('='*10)
    # 类中函数的调用
    Animal('哺乳动物').myFunction() # 调用实例方法
    Animal.clsFuncion() # 调用类方法
    Animal('哺乳动物').clsFuncion() # 调用类方法
    Animal.staticFounction() # 调用静态方法
    Animal('哺乳动物').staticFounction()

    # 私有属性调用
    # print(Animal('哺乳动物').__weight)
    # print(Animal._Animal__weight)
    print(Animal('哺乳动物')._Animal__weight)
    # 私有方法调用
    print(Animal('哺乳动物')._Animal__siyouFunction())   # todo 加上__类名前置 以强制取用

    ret = Animal('狗').count
    print(ret)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值