<分区>
我有一个 Python 类 MyObject
(tuple
的子类)和另一个用于一组这些对象的类 MyObjectSet
(一个子类集
)。我希望,对于我为 MyObject
定义的任何非内置方法,为 MyObjectSet
定义一个同名方法,其值等于MyObjectSet
内容的方法。
我原以为像下面的代码这样的东西会起作用,但结果与我的预期结果不符。在实践中,MyObject
和 MyObjectSet
有更多的东西并且是合理的。
class MyObject(tuple):
def stat_1(self):
return len(self)
def stat_2(self):
return sum(self)
class MyObjectSet(set):
pass
for stat_name in dir(MyObject):
if not stat_name.startswith("__"):
stat_func = getattr(MyObject, stat_name)
if callable(stat_func):
setattr(MyObjectSet, stat_name, lambda S: sum(stat_func(p) for p in S))
if __name__ == "__main__":
S = MyObjectSet(MyObject(t) for t in [(1,2), (3,4)])
result, expected = S.stat_1(), sum(p.stat_1() for p in S)
print(f"S.size() = {result}, expected {expected}")
result, expected = S.stat_2(), sum(p.stat_2() for p in S)
print(f"S.sum() = {result}, expected {expected}")
有什么办法可以实现这个功能吗?