1,特殊装饰器
类中定义的普通方法(即实例方法),需要先实例化类的一个对象再调用,无法直接用类调用。而被@classmethod或@staticmethod装饰过的方法,可以不需要实例化,直接以“类名.方法名()”的方式来调用。
三个装饰器都是在类中使用:
@property : 将函数封装为属性。需要参数
self,实例对象直接调用该方法,无需()。@classmethod :用于装饰“类方法”。需要参数
cls,无需self。该类方法可以直接被调用,而无需实例化。无 self 参数,也无法访问实例化后的对象该类方法只能访问类属性,而无法访问实例属性。@staticmethod :静态方法。无需参数
cls、self。被装饰的方法会成为静态方法,无需实例化可以调用。
代码实现
import time
class Date(object):
def __init__(self, year, month, day):
self._year = year
self._month = month
self._day = day
@classmethod
def today(cls):
todayBackup = time.localtime()
return cls(todayBackup.tm_year, todayBackup.tm_mon, todayBackup.tm_mday)
@property
def printtime(self):
return str(self._year)+'-'+str(self._month)+'-'+str(self._day)
@staticmethod
def timeadd(a,b):
return a+b
today = Date.today() # 注意此处直接调用了方法,并没有初始化生成实例类Date()
print(today.printtime) # 2022-5-10
print(Date.timeadd(2,1)) # 3
上述类中综合使用了三个参数,一个巧妙之处是,整个过程中没有明确指定初始化参数就形成了实例化 today 类.
本文详细介绍了Python中的特殊装饰器@property、@classmethod和@staticmethod,包括它们的作用和使用场景。通过实例展示了如何在类中定义和调用这些装饰器方法。@property用于将方法转化为属性,@classmethod允许类方法直接调用,@staticmethod则创建与类或实例无关的静态方法。在示例代码中,Date类使用这些装饰器实现了无需实例化即可调用的方法,如获取当前日期的today()方法和计算时间的timeadd()方法。

2141

被折叠的 条评论
为什么被折叠?



