案例:银行卡
编写一个银行卡类:
属性:银行名称,卡号,密码,姓名,余额
方法:登录,存款
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初始化方法被调用!
鸟在飞!