Python——读写属性

采用读写属性的目的就是把录入的数据控制在合理区间。

        如:学生的年龄(age),学生的身高(height)...

方法一:利用实例方法来控制

class Student:
    def __init__(self,name="",age=0):
        self.name = name
        self.set_age(age)

    def set_age(self,value):
        if value > 30:
            value = 30
        elif value < 20:
            value = 20
        self.__age = value
    
    def get_age(self):
        return self.__age
    

s = Student("张三",25)
s.name = "王五"
# 下面的传参和调用是错误的
# 这种方式相当于为 s 对象新创建了一个age实例变量并赋值,并不是类中的age实例变量
# s.age = 102
# print(s.name,s.age)
s.set_age(200)
print(s.name,s.get_age())

方法二:利用属性来控制

Python内置的@property装饰器就是负责把一个方法变成属性调用的

#     在继承关系中体会属性和内置可重写函数
#         -- 限制速度和充电功率的取值范围
#         -- 直接打印对象,格式如下:
#             xx的速度是xx
#             xx的速度是xx,电池容量是xx,充电功率是xx
#     父类:车(品牌,速度)
#                 0-120
#     创建子类:电动车(电池容量,充电功率)
#                              180-220
class Car:
    def __init__(self,brand="",speed=0):
        self.brand = brand
        self.speed = speed

class ElectricCar(Car):
    def __init__(self, brand="", speed=0,capacity=0,power=0) -> None:
        super().__init__(brand, speed)
        self.capacity = capacity
        self.power = power

    def __str__(self):
        return f"{self.brand}的速度是{self.speed},电池容量是{self.capacity},充电功率是{self.power}"

    @property
    def speed(self):
        return self.__speed

    @speed.setter
    def speed(self,value):
        if value > 120:
            value = 120
        elif value < 0:
            value = 0
        self.__speed = value

    @property
    def power(self):
        return self.__power
    
    @power.setter
    def power(self,value):
        if value > 220:
            value = 220
        elif value < 180:
            value = 180
        self.__power = value

# ---------- 测试用例 -----------------
car1 = ElectricCar("欧派",1200,200,50)
print(car1)
car2 = ElectricCar("爱玛",25,200,50)
print(car2)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值