Python-面向对象(类与继承)

类:

定义类:

class 类名():
    代码
    .....

创建对象

对象名 = 类名()

self
self指的是调⽤该函数的对象。
例:

class Washer():
    def wash(self):
        print('我会洗⾐服')
 # <__main__.Washer object at 0x0000024BA2B34240>
        print(self)
haier1 = Washer()
# <__main__.Washer object at 0x0000018B7B224240>
print(haier1)
# haier1对象调⽤实例⽅法
haier1.wash()
haier2 = Washer()
# <__main__.Washer object at 0x0000022005857EF0>
print(haier2)

添加和获取对象属性

利用self直接定义变量添加即可
例:

# 定义类
class Washer():
    def print_info(self):
        print(f'haier1洗⾐机的宽度是{self.width}')
        print(f'haier1洗⾐机的⾼度是{self.height}')
# 创建对象
haier1 = Washer()
# 添加实例属性
haier1.width = 500
haier1.height = 800
haier1.print_info()

魔法方法:

  1. __init__()
    类似于构造函数,用于初始化对象
    可以带参也不可以不带参,和c++一样不多说啦
    __init__() ⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤
    __init__(self) 中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引⽤传递过去

2.__str__()
当你想要输出这个类的对象时会自动输出这个函数的返回值
3. __del__()
删除一个类的对象时会自动调用这个函数

总结:如果要直自己实现一个功能,还需多练,这只是基础,准备学完python基础先搞个类似于管理系统的项目熟悉下python基础,要不这样学不了什么

继承:

单继承:

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'

    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')


# 2. 徒弟类
class Prentice(Master):
    pass
# 3. 创建对象daqiu
daqiu = Prentice()
# 4. 对象访问实例属性
print(daqiu.kongfu)
 #5. 对象调⽤实例⽅法
daqiu.make_cake()

这个pass一开始没看懂,搜了一下才知道是占据位置,让代码整体完整的意思

多继承:

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'
    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')
# 创建学校类
class School(object):
    def __init__(self):
        self.kongfu = '[⿊⻢煎饼果⼦配⽅]'
    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')
class Prentice(School, Master):
    pass
daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()

注意:
1.当⼀个类有多个⽗类的时候,默认使⽤第⼀个⽗类的同名属性和⽅法。
2.子类可重写父类的函数,若调用该函数时,会调用子类的函数
3.利用super可以调用父类中与子类同名的函数
4.注意:使⽤super() 可以⾃动查找⽗类。调⽤顺序遵循 __mro__ 类属性的顺序。⽐较适合单继承
使⽤

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'

        def make_cake(self):
            print(f'运⽤{self.kongfu}制作煎饼果⼦')

class School(object):
        def __init__(self):
            self.kongfu = '[⿊⻢煎饼果⼦配⽅]'

        def make_cake(self):
            print(f'运⽤{self.kongfu}制作煎饼果⼦')

    # 独创配⽅
class Prentice(School, Master):
        def __init__(self):
            self.kongfu = '[独创煎饼果⼦配⽅]'

        def make_cake(self):
            print(f'运⽤{self.kongfu}制作煎饼果⼦')

daqiu = Prentice()
print(daqiu.kongfu)
daqiu.make_cake()
print(Prentice.__mro__)

注意:
__mro__方法:python 类有多继承特性,如果继承关系太复杂,很难看出会先调用那个属性或方法,利用这个方法获取该类的调用顺序

定义私有属性与方法

在属性名和⽅法名 前⾯ 加上两个下划线 __。即可

class Master(object):
    def __init__(self):
        self.kongfu = '[古法煎饼果⼦配⽅]'
    def make_cake(self):
        print(f'运⽤{self.kongfu}制作煎饼果⼦')
class School(object):
    def __init__(self):
        self.kongfu = '[⿊⻢煎饼果⼦配⽅]'
    def make_cake(self):
         print(f'运⽤{self.kongfu}制作煎饼果⼦')
class Prentice(School, Master):
    def __init__(self):
         self.kongfu = '[独创煎饼果⼦配⽅]'
 # 定义私有属性
         self.__money = 2000000

 # 定义私有⽅法
    def __info_print(self):
         print(self.kongfu)

         print(self.__money)

    def make_cake(self):
         self.__init__()

         print(f'运⽤{self.kongfu}制作煎饼果⼦')

    def make_master_cake(self):
        Master.__init__(self)

        Master.make_cake(self)

    def make_school_cake(self):
        School.__init__(self)

        School.make_cake(self)


# 徒孙类
class Tusun(Prentice):
    pass
daqiu = Prentice()
# 对象不能访问私有属性和私有⽅法
# print(daqiu.__money)
# daqiu.__info_print()
xiaoqiu = Tusun()
# ⼦类⽆法继承⽗类的私有属性和私有⽅法
# print(xiaoqiu.__money) # ⽆法访问实例属性__money
# xiaoqiu.__info_print()

注意:私有属性和私有⽅法只能在类⾥⾯访问和修改。

获取和修改私有属性值

在Python中,⼀般定义函数名 get_xx ⽤来获取私有属性,定义 set_xx ⽤来修改私有属性值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值