Python类的属性(学习笔记)

属性本质是方法,使用像字段

person.py

import datetime
class Person:
    def __init__(self, name='', birthdate, gender='男', salary=0)        
        self.name = name
        self.age = birthdate
        self.gender = gender
        self.salary = salary 
        //self._salary                        //_开头表示私有
        
    
    @property                            //装饰器
    def salary(self):                    //外部访问
        return self._salary


    @salary.setter
    def salary(self, value):
        if    value <= 0:
            self._salary = 0
        else:
            self._selary = value


    def get_age(self):
        return datetime.date.today().year - self.birthdate.year

    @property                
    def age(self):                            //本质是方法,使用像字段
        return datetime.date.today().year - aelf.birthdate.year


    @age.setter
    def age(self, value):
        //raise ValueError('年龄不能赋值,只能通过生日计算!')
        print('您赋的值是:', value)
        print('年龄是通过生日计算的,不能手动赋值!')
            

    def say(self, word):                                    
        print("{} say: {}".format(self.name, word))


    def __str__(self):
        return f'<Person {self.name}, {self.birthdate}, {self.gender}, {self.salary}>'
>>>import person
>>>p = Person('Tom', datetime.date(1990, 3, 3))

>>>print(p.age)
30                                    
                    //属性默认下不能赋值,如果要赋值要写一个setter
// >>>p.age = 30        //AttributeErrpe: can't set attribute
                                    
//>>>p.age = 30
ValueError: 年龄不能赋值,只能通过生日计算
>>>p.age = 30
您赋的值是:30
年龄是通过生日计算的,不能手动赋值!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值