gpt4 book ai didi

python - 如何在 python 返回时强制调用类方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:57 25 4
gpt4 key购买 nike

我有一个ReportEntry

class ReportEntry(object):
def __init__(self):
# Many attributes defined here

... # Lot many setattr/getattr here
def validate(self):
# Lot of validation code in here
return self

多个其他类与ReportEntry类保持has-a关系

class A(object):
def test1(self):
t1 = ReportEntry()
# Assign the attribute values to t1
return t1.validate()

def test2(self):
t2 = ReportEntry()
# Assign the attribute values to t2
return t2.validate()

并且有多个像A这样的类。

我需要强制每个 ReportEntry 类实例在 returnreturn 之前调用 validate() >.

基本上,ReportEntry 的任何实例都不应逃避验证,因为如果缺少某些内容,最终报告生成将失败。

我怎样才能做到这一点?

最佳答案

你可以写一个类装饰器:

import inspect

def validate_entries(cls):
def validator(fnc): # this is a function decorator ...
def wrapper(*args, **kwargs):
rval = fnc(*args, **kwargs)
if isinstance(rval, ReportEntry):
# print('validating')
return rval.validate()
return rval
return wrapper
for name, f in inspect.getmembers(cls, predicate=inspect.isfunction):
setattr(cls, name, validator(f)) # .. that we apply to all functions
return cls

现在您可以定义所有类似 A 的类:

@validate_entries
class A(object):
# ...

这将验证任何 A 的方法返回的任何 ReportEntry

关于python - 如何在 python 返回时强制调用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54167069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com