栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python - 封装

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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元
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/977044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号