首页 > 解决方案 > 基类方法的动态更新

问题描述

让类 DivStr 基于类 str。

class DivStr(str):

    def init(self, val):
        self.str_val = val

在 str 中有许多方法,但它们都返回字符串类型。我该怎么做才能使所有基本字符串方法像在字符串类中一样工作,但要让它们返回 DivStr 类。

例如,如果我从字符串“abs”调用lower,我将得到字符串“ABC”。我需要获取 DivStr("ABC")。所有 str 方法都应该没问题。我只听说过 exec 我可以在其中做类似的事情

  exec("def " + fun + "(*args): return DivStr(function(\"" + fun + "\", *args)"))

但我不知道如何遍历所有 str 可调用方法以及如何添加它们。

标签: pythonpython-3.xinheritance

解决方案


您可以使用dir()提取类属性的名称,getattr()获取实际属性并callable()隔离实际是方法的属性,例如:

for attr_name in dir(my_class):
    attr = getattr(my_class, attr_name)
    if callable(attr):
        ...

请注意,exec()与上述结合使用可能被认为是不好的做法。


推荐阅读