【Python基础知识】类中的属性装饰器和综合案例

发布 : python培训      来源:python干货资料

2021-03-22 16:16:42

1、类中的属性装饰器

属性装饰器是实现将方法转换成属性的装饰器,便于操作属性,实现属性的更改、查看。其语法格式如下:

class 类名():

def __init__(self):

self.__变量名 = 值

@property

def 方法名(self):

return self.__变量名

@方法名.setter

def 方法名(self, 新值):

self.__变量名 = 新值

下面是一个使用属性装饰器的示例:

  1. >>> class Car(object):
  2. ... def __init__(self, brand, color):
  3. ... self.brand = brand
  4. ... self.color = color
  5. ... self.__gaso = 20
  6. ... @property
  7. ... def gaso(self):
  8. ... return self.__gaso
  9. ... @gaso.setter
  10. ... def gaso(self, m):
  11. ... self.__gaso += m
  12. ...
  13. >>> falali = Car('法拉利', '白色')
  14. >>> falali.gaso = 80 # 进行加油
  15. >>> print(falali.gaso) # 打印油量
  16. 100

上述程序中,首先在__init__()方法中初始化了一个类私有属性self.__gaso,并赋值20;然后定义属性装饰器@property,后接的gaso()方法获得油量;接着用@gaso.setter,给self.__gaso重新赋新值,由于加油是需要保留原先油量的,因此采用了“+=”运算符进行赋值。当使用Car类创建实例falali后,初始化油量是20,然后给属性装饰器赋值80,则最后打印油量是20+80=100。

【Python基础知识】类中的属性装饰器和综合案例

2、类的综合案例

创建一个学生类(Student),类中含有类属性城市(city),默认为北京。初始化方法中含有属性名字、年龄和金钱,其中金钱为私有属性,默认值为0。学生实例的城市属性与类属性相同。代码如下:

  1. class Student:
  2. city = '北京'
  3. def __init__(self, init_name, init_age, init_money = 0):
  4. self.name = init_name
  5. self.age = init_age
  6. self.__money = init_money
  7. self.city = Student.city

学生类中包含以下方法。

①实例方法:创建实例money属性的get和set方法。

②私有方法:创建__study()方法,打印某某在认真听课。

③实例方法:创建on_grade()方法,调用上面的私有方法__study()。

④魔法方法:创建一个__str__()打印方法,打印学生的名字。

⑤静态方法:创建class_discipline()方法,打印课堂纪律。

⑥类方法:创建set_city()方法,设置城市属性;创建show_city()方法,打印城市属性。

在学生类中添加以上方法,代码如下:

  1. def get_money(self):
  2. print('%s有%d RMB' % (self.name, self.__money))
  3. def set_money(self, m):
  4. self.__money += m
  5. def __study(self):
  6. print('%s在认真听课' % self.name)
  7. def on_grade(self):
  8. self.__study()
  9. def __str__(self):
  10. return self.name
  11. @staticmethod
  12. def class_discipline():
  13. print('1.上课认真听讲! \n'+
  14. '2.不准迟到早退! \n'+
  15. '3.不准交头接耳! \n')
  16. @classmethod
  17. def set_city(cls, city):
  18. cls.city = city
  19. @classmethod
  20. def show_city(cls):
  21. print('%s人' % (cls.city))

创建了学生类之后,在 Python 程序入口if __name__ == '__main__'中(每个Python模块都包含内建变量__name__,它的默认值为'__main__'),进行类实例化和实例属性设置和实例方法调用。首先打印课堂纪律;然后创建一个学生实例liu,构造函数的参数为:刘永,18岁,金钱设置为10000,查看金钱余额,调用听课方法,打印城市;最后创建一个学生实例wu,构造函数的参数为:吴敏,16岁,金钱设置为9000,查看金钱余额,调用听课方法,修改城市属性并打印。代码如下:

  1. if __name__ == '__main__':
  2. Student.class_discipline()
  3. liu = Student('刘永', 18)
  4. liu.set_money(10000)
  5. liu.get_money()
  6. liu.on_grade()
  7. Student.show_city()
  8. wu = Student('吴敏', 16)
  9. wu.set_money(9000)
  10. wu.get_money()
  11. wu.on_grade()
  12. Student.set_city('上海')
  13. Student.show_city()

建议将这个程序使用脚本模式运行,运行结果:

  1. 1.上课认真听讲!
  2. 2.不准迟到早退!
  3. 3.不准交头接耳!
  4. 刘永有10000 RMB
  5. 刘永在认真听课
  6. 北京人
  7. 吴敏有9000 RMB
  8. 吴敏在认真听课
  9. 上海人

THE END  

声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

领取零基础自学IT资源

涉及方向有Java、Web前端、UI设计、软件测试、python等科目,内容包含学习路线、视频、源码等

点击申请领取资料

点击查看资料详情 

收起 


 相关推荐

问题解答专区
返回顶部