python - 类实例可以知道它是否是一个参数吗?

标签 python class properties arguments

类的实例是否可以知道它是否被用作参数,是否是位置参数或关键字参数,如果是位置参数,它位于哪个位置,如果是关键字,它被分配给哪个关键字,并遵循所有这些,它是否可以根据该知识决定/返回/用其他东西替换自己,例如它的实例属性之一,因此调用将其作为参数而不是类实例本身?

我意识到我的类问题变得越来越疯狂。谢谢你逗我开心。

最佳答案

不——这一切都是不可能的。

尝试思考如何接近 - 您可以定义一个装饰器,循环遍历函数的参数并告诉参数此信息。

def toldargs(f):
    def wrapper(*args, **kargs):
        for i, arg in enumerate(args):
            arg.you_are_arg_number(i)
        for k in kargs:
            kargs[k].you_are_karg_named(k)
        return f(*args, **kargs)
    return wrapper

@toldargs
def myfunction(a, b):
    ...

(未编译/未经测试)。

如果您在经常调用的函数上使用它,这将显着影响性能。并且在调用方法之前您可能需要某种 try/catch 或实例测试,以避免不期望此类调用的参数出现错误。

更新 - 再想一想,您(可能)并不真正关心何时将某些内容传递给函数,而是调用实例上的某些操作时的上下文是什么(如果arg 被传递给一个函数但从未使用过,那么没关系,无论如何我能想到)。

换句话说:

def some_function(a, b):
    # here you can't trigger anything
    ...
    a.foo() # but here you can

.foo()被调用时,你可以检查你的上下文。有多种方法 - 最明显/最粗鲁的是抛出异常,捕获它并检查调用堆栈。但您也可以使用所有工具 here 。因此,例如,您可以检查当前堆栈以查看是否从特定类内部调用您。

同样,这可能会变得缓慢而复杂......

更新 2 - 请参阅 Python: Modifying passed arguments before class instance initialization基于元类的方法。

关于python - 类实例可以知道它是否是一个参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10428399/

相关文章:

c++ - 抛出并捕获 std::string

class - JsDoc 链接到类的属性

Excel 工作表属性窗口显示为空白

python - 张量板 : How to view model summary?

python - 将字典转换为数据框,键作为列名,键的值作为数据框的列值

python - 调用 list() 清空我的可迭代对象?

javascript - 在 Javascript 中获取类的所有实例

java - 使用 java.util.Properties 的奇怪显示

c# - 将数据公开为 C# 属性——好还是坏?

python - 缩减数据集的 LDA 准确率高于原始数据集