python 类继承原理

python的继承机制,有几个需要注意的(以下 父类是Animal,属性有(name, age, gender) ,子类是Dog ,属性有(name, age, gender,weight) ):

1.属性继承一定记得要加上super(),如下图,不然的子类的属性就只有你新增的,如下图,父类有三个属性 name, age, gender ,子类新增了一个weight属性, 属性命名的话一般有三种形式:

  1. 直接名字 self.weight
  2. 名字前面加一个下划线 如 self._weight
  3. 名字前面加两个下划线 如 self.__weight
    区别的话主要是访问和修改权限:
    第1种,属性在类内、类外、子类都是可以访问和修改的,子类如果在不知道父类有此属性的话很容易造成覆盖;
    第2种的话,访问权限和第1种一样,不过为了防止子类意外覆盖父类属性,约定俗成的名义上的“私有属性”,意思就是大家把带一个下划线的属性当成私有的,尽量不在类外去访问和修改它。
    第3种是真正的私有属性,类内可以访问,但是类外和子类继承都不能直接访问(其实可以通过引用父类类名来进行访问,原因是子类继承父类的私有属性时,其实只是把属性名字给改了),子类要访问的父类的私有属性的话,一般要父类里设置了方法来访问

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

def __init__(self, name, age='1', gender=0, weight=10):
        super(Dog, self).__init__(name, age, gender)
        self.__weight = weight
from enum import Enum


class Gender(Enum):
    Male = 0
    Female = 1


class Animal(object):

    def __init__(self, name, age='1', gender=0):
        self.__name = name  # 私有成员在子类中不能直接通过self调用,可以通过继承公共方法调用
        self.__age = age
        self.__gender = gender

    def get_name(self):
        return self.__name

    def run(self):
        print('the Animal ' + self.get_name() + ' is running...')

    def info(self):  # 输出相关信息
        print('my info is: ')
        print('name: ' + self.get_name())
        print('age: ' + self.__age)
        if self.__gender:
            print('gender: female')
        else:
            print('gender: male')


class Dog(Animal):

    def __init__(self, name, age='1', gender=0, weight=10):
        super(Dog, self).__init__(name, age, gender)
        self.__weight = weight

    def run(self):
        print('the Dog ' + self.get_name() + ' is running...')


def run(Animal):
    Animal.run()


if __name__ == '__main__':
    an = Animal('blake')
    dog = Dog('haki')
    run(an)
    run(dog)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值