day18 继承、多继承与私有化

继承

1.什么是继承

"""
继承就是让子类直接拥有父类的属性和方法。
子类 - 继承者
父类 - 被继承者
“”"

2.继承的语法

"""
class 类名(父类1,父类2,…):
pass
定义类的时候如果没有写继承关系,那么这个类默认继承python的基类:object
class 类名: - class 类名(object)
“”"

子类继承父类的属性和方法

class Person:
    num = 61

    def __init__(self):
        self.name = '小明'
        self.age = 18
        self.gender = '男'

    def func1(self):
        print(f'{self.name}今年{self.age}岁!')

    @classmethod
    def func2(cls):
        print(f'人类的数量: {cls.num}')

    @staticmethod
    def func3():
        print('人类破坏环境!')

class Student(Person):
    pass


print(Student.num)

stu = Student()
print(stu.name, stu.age, stu.gender)

stu.func1()
Student.func2()
Student.func3()

3.在子类中添加属性和方法

"""
1)添加类属性和方法:
直接在子类中添加新的类属性和新的方法
2)添加对象属性
在子类中的__init__方法添加新的对象属性,同时用super()去调用父类的__init__
super的用法:
super(类,对象).方法() - 调用指定类的父类的指定方法

def __init__(self): - 子类的对象属性
super().__init__() - 调用父类的对象属性
“”"

class A:
    x = 10

    def __init__(self):
        self.a = 11
        self.b = 22

    def func1(self):
        print('A中的对象方法')

class B(A):

    def __init__(self):
        # super(B, self).__init()  # 效果同下
        super().__init__()  # 调用当前类的父类的__init__方法
        self.name = '小明'
        self.age = 18

    def func2(self):
        print('B中的对象方法')

    @classmethod
    def func3(cls):
        print('B中的类方法')


print(B.x)
t1 = B()
t1.func1()
t1.func2()
print(t1.a)
print(t1.name)
B.func3()

4.类中的方法调用

"""
在通过类或者对象调用方法的时候,会先看当前类是否存在这个方法,如果存在就直接调用,如果不存在就看父类是否存在,
如果存在就调用父类中的这个方法,如果父类没有就看父类的父类…以此类推,如果找到基类都没有找到这个方法,程序才报错。
“”"

多继承

class Animal:
    num = 100

    def __init__(self):
        self.gender = '雌'
        self.age = 1

    def func1(self):
        print('动物的对象方法')

class Fly:
    name = '飞行器'

    def __init__(self):
        self.max_height = 0
        self.time = 0
        self.speed = 0

    def func2(self):
        print('飞行器的对象方法')

class Bird(Fly, Animal):
    pass


print(Bird.num)
print(Bird.name)

b = Bird()
b.func1()
b.func2()

# print(b.age, b.gender)

print(b.max_height, b.speed, b.time)

私有化

1.访问权限

"""
类的内容的访问权限分为三种:
1)公开的:在类的内部和类的外部都可以使用,并且可以被继承
2)保护的:在类的内部可以使用,也可以被继承,但是不能在类的外部使用
3)私有的:只能在类的内部使用,不能被继承也不能在类的外部使用

从真正意义上的访问权限上讲,python类中所有的内容都是公开的,python的私有化是假私有化。
“”"

2.私有化

在需要私有化的属性名或者方法名前加__(不能同时在名字的最后也加__)

class A:
    num = 100
    __name = 'abc'

    def __init__(self):
        self.x = 100
        self.__y = 200

    @classmethod
    def func1(cls):
        print('类的内部num:', A.num)
        print('类的内部__name:', A.__name)

A.func1()
print(A.num)

# print(A.__name)

a = A()
print(a.__dict__)   # {'x': 100, '_A__y': 200}
print(a._A__y)  # 200
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值