ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

面向对象的3个装饰器

2022-07-04 20:04:00  阅读:122  来源: 互联网

标签:__ 调用 name self 面向对象 装饰 def cls


@property   # 伪类装饰器     

把方法伪装成属性,调用的时候直接 对象.方法, 让我们的语义更加合理

#比如计算学生的年龄,传生日
import time

class Student:
    def __init__(self,name,birth):
        self.name=name
        self.birth=birth

    @property  # 伪类装饰器,把方法伪装成属性,让我们的语义更加合理
    def age(self):
        return time.localtime().tm_year-self.birth

zhangsan=Student('张三',1998)
print(zhangsan.age)  #  一般调用方法名,要写成 zhangsan.age(),用@property 当成属性来调用
@staticmethod 静态方法装饰器
可以将类中的实例方法,通过类名直接调用,不经过实例化
该装饰器调用的时候不需要传self,cls参数
缺点:无法调用带有普通self的函数
# class Cat:
#     def __init__(self,name,color):
#         self.name=name
#         self.color=color
#
#     def eat(self):
#         print(self.name,'喜欢吃鱼')
#
#     @staticmethod
#     def color():
#         print('ssssss')
#
# Cat.color()
@classmethod 类方法装饰器
可以将类里面的方法不经过实例化直接调用
class Manager:
    def __init__(self,name):
        self.name=name
        print(self.name)

    @classmethod
    def login(cls):
        print('cls',cls)
        print('Manager',Manager)  #  两者同一个地址
        username=input('>>>>')
        # cls(username)
        Manager(username)

Manager.login()
总结:
@property 把方法伪装成属性
@staticmethod 静态方法,没有默认参数,可以通过类名来调用,不需要实例化
@classmethod 类方法, cls作为默认参数,可以通过类名来调用,不需要实例化

 

标签:__,调用,name,self,面向对象,装饰,def,cls
来源: https://www.cnblogs.com/gm11/p/16444231.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有