2
0
0

01-面向对象编程

2026-06-13
2026-06-20

面向对象

思维导图

python高级day01.png

定义类

定义变量
name = 'zs'
age = 18
定义函数
def fn():
    # 函数内容
# python2版本的写法    
class 类名:
# python3版本的写法
class 类名():
# python3版本完整的写法
class 类名(object):
    属性:以前写的变量
	方法:以前写的函数

通过类创建对象

对象 = 类名()
模板创造实体
类外部使用:
使用对象的属性 :  对象.属性名
使用对象的方法 :  对象.方法名()
类内部使用:
self.属性名
self.方法名()
self - 谁调用的self就是谁,__init__的self指的是实例对象本身

给对象添加额外的属性:
对象.属性名 = 属性值
访问对象的属性:
对象.属性名


魔法方法

在特定情况下会自动调用的方法

【重点掌握】__ init __ : 创建对象自动调用

__ str __ : 打印对象/str(对象)自动调用

__ del __ : 删除对象的时候(手动删除/代码运行结束的自动删除)

......

通过魔法方法__ init __创建不同的对象

1.手动添加不同的属性
class Car():
    #num = 4 #不要写死,要动态设置
    def create(self,num):
        self.num = num
    # 使用动态设置的属性    
    def look_lunzi(self):
        print(f"轮子的数量是{self.num}")
        
baoma  = Car()
# 手动调用-create可以让baoma拥有num属性
baoma.create(4)
# 此时就可以访问baoma的num属性
baoma.look_lunzi()
# 手动添加是可以的,但是会很麻烦,每次都要写相同的代码
dongfeng = Car()
dongfeng.create(8)
qinggui = Car()
qinggui.create(16)

2.通过__ init __自动添加不同的属性
class Car():
    #num = 4 #不要写死,要动态设置
    def __init__(self,num):
        self.num = num
    # 使用动态设置的属性    
    def look_lunzi(self):
        print(f"轮子的数量是{self.num}")
# 自动调用-__init__,将__init__参数传递给类即可
baoma  = Car(4)
# 此时就可以访问baoma的num属性
baoma.look_lunzi()

dongfeng = Car(8)
qinggui = Car(16)

ATM取款面向对象案例

class ATM():
    # 初始化属性
    def __init__(self, name, account, password):
        # 属性
        # 初始金额 - 0
        self.money = 0
        # 需求:
        # 银行的名称
        self.name = name
        # 银行卡的初始账号密码
        self.account = account
        self.password = password

    # 定义方法:查询余额、存钱、取钱、退出
    # 1.查询余额
    def search_money(self):
        print(f"当前账户金额为:{self.money}")

    # 2.存钱
    def save_money(self):
        save = int(input('请输入要存入的金额'))
        self.money += save
        # 2.存钱

    # 3.取钱
    def get_money(self):
        get = int(input('请输入要取出的金额'))
        self.money -= get

    # 4.开始
    def start(self):
        while True:
            choose = input("""
                请输入您要办理的业务:
                  1.查询余额
                  2.存钱
                  3.取钱
                  4.退出
            """)
            if choose == '1':
                self.search_money()
            elif choose == '2':
                self.save_money()
            elif choose == '3':
                self.get_money()
            elif choose == '4':
                # 5.结束
                break

    # 5.登录
    def login(self):
        account = input('请输入你的账号')
        password = input('请输入你的密码')
        if account == self.account and password == self.password:
            print(f'登录成功,{self.name}欢迎您~')
            self.start()
        else:
            print('账号或密码错误')


# 创建对象
china_bank = ATM('中国银行', 'laopan1', '123456')
zhaoshang_bank = ATM('招商银行', 'laopan2', '123456')
jianshe_bank = ATM('建设银行', 'laopan3', '123456')

# 使用对象
china_bank.login()

# 练习-ATM:
# 1.能查询余额
# 2.能存钱
# 3.能取钱
# 4.能退出

面向对象的三大特性

  • 封装 - 把属性和方法写到类里面,类也支持私有属性和私有方法(类的外部无法访问和使用)
  • 继承 - 从近到远,逐层继承,没有才继承,有了就跳过,如果有多个,按顺序继承(类.mro可以查看继承的关系,私有属性和方法不能继承)
  • 多态 - python是弱类型语言,没有严格意义上的多态(不同对象调用相同的方法,执行结果不同)
# 封装
class Yeye():
    car = '28大杠'
    __money = 100000
    def damajiang():
        print('打麻将咯~')
    def __taiji():
        print('太极拳')
    def work():
        print('公务员')
#继承
class Father(Yeye):
    #重写父类方法
	def work():
        print('程序员')
yeye = Yeye()
father = Father()
father.damajiang()

#多态
def work(obj):
    obj.work()
 
work(yeye)
work(father)

细节点补充

  • 私有属性和方法不能进行继承
  • 继承顺序是逐层继承,由近到远(看mro)

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!