【问题标题】:How to access *args variable name(s) in __init__如何在 __init__ 中访问 *args 变量名
【发布时间】:2022-01-05 10:41:51
【问题描述】:

如何在__init__ 方法中访问 *args 变量名?

例如

class Parent:
    def __init__(self, *args):
        # How to access *args variable names here?
        # In this example: foo, bar
        pass

class Child(Parent):
    def __init__(self, foo, bar):
        super().__init__(foo, bar)

【问题讨论】:

  • 这甚至不是一个有意义的概念。 *args 与任何其他列表一样,只包含 。无论如何,不​​能保证这些值甚至来自变量——它们很容易成为文字或表达式。
  • 这在不同的上下文中是可能的。例如,一个 functools 包装的包装器可以访问包装的 *args 变量名称,如下所示:func.__code__.co_varnames
  • *args 和 *kargs:geeksforgeeks.org/args-kwargs-python。 args 仅用于值,kargs 用于键 => 值。
  • 你不能。 变量不会被传递给函数,objects会。一般来说,您应该永远不必关心引用您的对象的变量的名称是什么。这通常是设计损坏的标志

标签: python python-3.x oop


【解决方案1】:

受到 OP 评论的启发,也许你可以做类似的事情

class Parent:
    def __init__(self, *args):
        self.child_varnames = type(self).__init__.__code__.co_varnames[1:]

class Child(Parent):
    def __init__(self, foo, bar):
        super().__init__(foo, bar)

在我的测试中,我得到了

>>> c = Child(1, 2)
>>> c.child_varnames
('foo', 'bar')

【讨论】:

  • 是的 - 这成功了。希望构建一个 API 包装器,用户可以将 kwarg 作为 arg 传递。谢谢
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2022-06-26
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多