如何解决使用父类的装饰器方法转换类方法
class JsonWriter() extends Writer[JSON] {
def writeTuple(t: Product,writeFn: (Product) => List[(TypeAdapter[U],U) forSome {type U}],out: mutable.Builder[JSON,JSON]): Unit = {
out += "[".asInstanceOf[JSON]
var first = true
writeFn(t).foreach { case (fieldTA,fieldValue) =>
if (first)
first = false
else
out += ",".asInstanceOf[JSON]
fieldTA.write(fieldValue,this,out)
}
out += "]".asInstanceOf[JSON]
}
}
上面,我有一个简单的装饰器功能,可以正常使用。
我想做类似的事情,但是要继承一个类。
我该如何继承这样的装饰器函数:
def greeting_decorator(original_function):
def return_function(*args):
name = 'John'
return f'Hi,I\'m {name},fullname: {original_function(*args)}'
return return_function
@greeting_decorator
def greeting(name,surname):
return f'{name} {surname}'
print(greeting('John','Doe'))
解决方法
如果您确定父类将始终为Guy
,则可以通过@Guy.greeting_decorator
进行简单注释:
class Guy:
def __init__(self,name):
self.name = 'John'
def greeting_decorator(original_function):
def return_function(self,*args):
return f'Hi,I\'m {self.name},fullname: {original_function(self,*args)}'
return return_function
class GuyWithSurname(Guy):
def __init__(self,name,surname):
super().__init__(name)
self.surname = surname
@Guy.greeting_decorator # <----- here
def __str__(self):
return f'{self.name} {self.surname}'
JohnDoe = GuyWithSurname('John','Doe')
这样,当您调用print(JohnDoe)
时,它将输出Hi,I'm John,fullname: John Doe
。
请注意,我必须更改greeting_decorator
和return_function
参数才能正确处理self
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。