python - 封装

封装

不同对象共有的方法可以通过函数封装的形式来达到代码复用的作用

"""示例1
小明体重75公斤,跑步一次减重1公斤,吃饭一次增重0.5公斤
小红体重45公斤,跑步一次减重1公斤,吃饭一次增重0.5公斤
"""
class Demo1():
    
    def __init__(self, name, weight):
        self.weight = weight
        self.name = name

    def run(self):
        self.weight -= 1
        return self.weight
    
    def eat(self):
        self.weight += 0.5
        return self.weight

xioahong = Demo1('xioahong',45)
print("吃饭之后的体重:",xioahong.eat())
print("跑步之后的体重",xioahong.run())
xiaoming = Demo1('xioaming',75)
print("吃饭之后的体重:",xiaoming.eat())
print("跑步之后的体重:",xiaoming.run())

'''示例2
编写一个学生类,有姓名、性别、年龄、语数英三个成绩,求总分、平均分以及打印学生的信息
类名:Students
属性:姓名、性别、年龄、语数英三个成绩
方法:总分、平均分以及打印学生的信息
'''
class Students():

    def __init__(self, name, sex, age, Mscore, Cscore, Escore):
        self.name = name
        self.age = age
        self.sex = sex
        self.Mscore = Mscore
        self.Cscore = Cscore
        self.Escore = Escore

    def avg(self):
        avgScore = 0
        avgScore = (self.Cscore + self.Mscore + self.Escore) / 3
        return avgScore

    def sum(self):
        sum = 0
        sum = self.Cscore + self.Mscore + self.Escore
        return sum

    def info(self):
        return ('''学生姓名:{},性别:{},年龄:{},总分:{}平均分:{}'''.format(self.name,self.sex,self.age,self.sum(),self.avg()))

zs = Students('zs','man',19,80,90,100)
print("总分:",zs.sum())
print("平均分:",zs.avg())
print(zs.info())

私有属性的封装

私有属性的封装 - get set

私有属性在类外边无法访问,虽然保证了数据的安全性,但是也带来了不便
属性的封装:可以在保证数据的安全性的同时也提供了访问的接口。

# 方法1:get  set
# 示例 银行账户取钱

class Account():
    
    def __init__(self, name, money):
        self.__name = name
        self.__money = money

    def get_money(self):
        return self.__money

    def set_money(self, m):
        if isinstance(m,int) or isinstance(m,float):
            if 0 < m <= self.__money:
                self.__money -= m
                print("余额:",self.__money)
            else:
                print("余额不足")
        else:
            print("输入的取款值不合法")
        return self.__money
    
accout1 = Account('zs',1000)
print(accout1.get_money())
print(accout1.set_money(300)) 

私有属性的封装 - 装饰器

@property:在装饰时,写在函数定义的上一行,而且函数定义时set/get方法不需要再加上set和get,直接写方法名
get方法:在函数上方加上@property,方法名不需要get
set方法:在函数上方加上@xxx.setter,方法名不需要set,其中xxx与方法名一致
调用:用@property装饰器装饰的方法,就相当于把方法变成了类的一个属性,属性名即方法名,属性名不可以重复,使用和复制就跟类中属性的操作一致
查看:对象.方法名
赋值:对象.方法名 = 新值

# 方法2: 装饰器
# 示例 银行账户取钱

class Account1():
    def __init__(self, name, money):
        self.__name = name
        self.__money = money

    @property
    def money(self):  # 函数名和属性名保持一致
        return self.__money

    @money.setter
    def money(self, m):  # 函数名和属性名保持一致
        if isinstance(m,int) or isinstance(m,float):
            if 0 < m <= self.__money:
                self.__money -= m
                print("余额:",self.__money)
            else:
                print("余额不足")
        else:
            print("输入的取款值不合法")
        return self.__money
    
zs = Account1('zs',300)
print(zs.money)
zs.money = 100  # 取款100元
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值