python封装(私有化)

本文介绍了Python中使用property方法进行类变量的封装,通过getter和setter方法控制对age和attack属性的访问,确保数据在合理范围内。展示了传统方式和使用@property装饰器的两种实现,强调了面向对象编程中数据访问的控制和逻辑限制。
摘要由CSDN通过智能技术生成

通过过ptoperty方法(类变量读取方法,类变量操作方法)封装数据

class Wife:
    def __init__(self,name,age,weight):
        self.name = name
        #本质:障眼法(实际将变量名改为:__类名__age)
        self.set_age(age) #使用方法来修改

    #提供公开的读写方法
    def get_age(self):
        return self.__age
    def set_age(self,value):
        if 21 <= value <= 31:
            self.__age = value
        else:
            raise ValueError("我不要")

w01 = Wife("aa",86,86)

使用property封装数据

class Wife:
    def __init__(self,name,age,weight):
        self.name = name
        #本质:障眼法(实际将变量名改为:__类名__age)
         #使用方法来修改
        self.age = age
        self.weight = weight 


    #提供公开的读写方法
    def get_age(self):
        return self.__age
    def set_age(self,value):
        if 21 <= value <= 31:
            self.__age = value
        else:
            raise ValueError("我不要")

    #属性 property对象拦截对age类变量读写操作
    age = property(get_age, set_age)

w01 = Wife("aa",86,86)
w01.age=15#拦截了对类变量age的写操作转到set_age方法
print(w01.age)#拦截了读操作
class Enemy:
    def __init__(self,name,hp,attack):
        self.name = name
        self.hp=hp
        self.attack=attack

    def set_hp(self,hp):
        if 100<=hp<=200:
            self.__hp = hp
        else:
            raise  ValueError("超出范围")
    def get_hp(self):
        return self.__hp
    hp = property(get_hp,set_hp)

    def set_attack(self, attack):
        if 10 <= attack <= 50:
            self.__attack = attack
        else:
            raise ValueError("超出范围")
    def get_attack(self):
        return  self.__attack
    attack = property(get_attack,set_attack)

enemy = Enemy("ni",100,15)

print(enemy.hp)

最终推荐写法
需要对实例变量进行逻辑上的限制

class Enemy:
    def __init__(self,name,hp,attack):
        self.name = name
        self.hp = hp
        self.attack=attack

    @property  #创建property对象,只负责拦截类变量hp的读取操作
    def hp(self):
        return self.__hp

    @hp.setter  #只负责拦截类变量hp的设置操作
    def hp(self,value):
        if 100<=value<=200:
            self.__hp = value
        else:
            raise  ValueError("超出范围")

    @property
    def attack(self):
        return self.__attack


    @attack.setter
    def attack(self, attack):
        if 10 <= attack <= 50:
            self.__attack = attack
        else:
            raise ValueError("超出范围")



enemy = Enemy("ni",150,15)
enemy.hp=100
print(enemy.__dict__)
print(enemy.hp)

内存图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值