【基础6】——类、对象、类的封装、继承

案例:银行卡

编写一个银行卡类:
属性:银行名称,卡号,密码,姓名,余额
方法:登录,存款

class Card():
    def __init__(self,cnum,cpwd,cname,cbalance):
        self.bankName = "python银行"
        self.cnum = cnum
        self.cpwd = cpwd
        self.cname = cname
        self.cbalance = cbalance

    def login(self):
        num = input("请输入卡号:")
        pwd = input("请输入密码:")
        if num==self.cnum and pwd==self.cpwd:
            print("验证成功!")
            return "ok"
        else:
            print("验证失败!")
            return "no"
    def deposit(self):
        r=self.login()#在类的题部调用其他方法,使用self作为对象名
        if r=="ok":
            money=float(input("请输入存款金额:"))
            self.cbalance+=money
            print("存款成功!存入",money,"元!余额",self.cbalance,"元!")

c1=Card("1001","123","张三",1000)
c2=Card("1002","123","李四",5000)

c2.deposit()

请输入卡号:1002
请输入密码:123
验证成功!
请输入存款金额:1500
存款成功!存入 1500.0 元!余额 6500.0 元!

一、类的封装

将类中属性或属性私有化,私有化的属性和方法只能在类的内部被调用
将 上述私有属性self.cbalance = cbalance改为self.__cbalance = cbalance,运行结果为:

AttributeError: ‘Card’ object has no attribute ‘__cbalance’

由此可见,是进行了封装,成为私有属性,无法直接访问到

  • 封装可以对属性或方法的访问进行限制
    class Card():
    def __init__(self,cnum,cpwd,cname,cbalance):
        self.bankName = "python银行"
        self.cnum = cnum
        self.cpwd = cpwd
        self.cname = cname
        self.__cbalance = cbalance

    def login(self):
        num = input("请输入卡号:")
        pwd = input("请输入密码:")
        if num==self.cnum and pwd==self.cpwd:
            print("验证成功!")
            return "ok"
        else:
            print("验证失败!")
            return "no"

    def showBalance(self):
    	#对属性或方法的访问进行限制
        r = self.login()
        if r == "ok":
            print("余额:",self.__cbalance,"元!")

    def deposit(self):
        r=self.login()#在类的内部调用其他方法,使用self作为对象名
        if r=="ok":
            money=float(input("请输入存款金额:"))
            self.cbalance+=money
            print("存款成功!存入",money,"元!余额",self.cbalance,"元!")

c1=Card("1001","123","张三",1000)
c2=Card("1002","123","李四",5000)

c2.showBalance()

请输入卡号:1002
请输入密码:123
验证成功!
余额: 5000 元!

  • 私有方法
    将 上述私有方法def login(self):改为def __login(self):,只能在类的内部被调用,能提高类的安全性

二、类的继承

一个类继承另一个类,自动拥有这个类的属性和方法
父类–子类

  • 父类:将多个类中的公共属性和方法统一定义。
  • 在Python中,一个父类可以有多个子类;一个子类可以有多个父类(特殊)(多继承)
  • object:所有类的最终父类
#父类:将多个类中的公共属性和方法统一定义
#在Python中,一个父类可以有多个子类;一个子类可以有多个父类(特殊)(多继承)
#object:所有类的最终父类
class Animal():
    def __init__(self,color,age):
        print("Animal初始化方法被调用!")
        self.color=color
        self.age=age
    def eat(self):
        print("动物在吃!")
    def run(self):
        print("动物在跑!")

class Cat(Animal):#子类(父类)
    pass

class Dog(Animal):
    pass

class Bird(Animal):
    def fly(self):
        print("鸟在飞!")

#------------------------------
c1=Cat("橘色",2)
c1.eat()

b1=Bird("橘色",2)
b1.fly()

Animal初始化方法被调用!
动物在吃!
Animal初始化方法被调用!
鸟在飞!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值