想在类的内部定义一个只用于该类的成员方法的修饰器
问题描述:
想在类的内部定义一个只用于该类的成员方法的修饰器,这样写是否合理?类内部的修饰器
__print_transfer_detail
是否是成员方法?是成员方法的话,既是修饰器又是成员方法,它的参数中可以没有self吗?不是成员方法的话,它需要用@classmethod 或者@staitcmethod修饰吗?
相关代码:
import datetime
class BankUser():
def __init__(self, money, kind):
self.__money = money
self.kind = kind
def __print_transfer_detail(func):
def inner(self, transfertype, amount):
func(self, transfertype, amount)
print("{}\t{}\t{:+.2f}\t{}\t{:.2f}".format(datetime.date.today(), transfertype, amount, self.kind, self.__money))
return inner
@__print_transfer_detail
def transfer(self, transfertype, amount):
self.__money += amount
user = BankUser(2000, '人民币')
user.transfer('转入', 27800)
user.transfer('消费', -99)
user.transfer('消费', -100)
user.transfer('转入', 500)
user.transfer('网转', -5000)相关截图:

38
收起
正在回答
1回答
同学,你好!1、类内部的修饰器是合理的
2、它不属于成员方法,使用对象.__print_transfer_detail会报错

3、不使用self 也会报错,定义初始化的参数无法传到__print_transfer_detail中

4、@classmethod 或@staitcmethod也无法单独调用该方法,只能在类中作为修饰transfer方法的装饰器

祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星