【问题标题】:Get attribute of class by directly accessing instance直接访问实例获取类的属性
【发布时间】:2017-05-10 22:26:55
【问题描述】:

我想知道如何“调用”类的实例,以使实例本身返回特定的值、属性或方法返回。
我试着用一个例子来说明这一点:

import numpy as np

class MyClass():
    def __init__(self, x):
        self.x = x
        self.y = self.x*2
        self.z = self.x*3


    def __call_instance__(self):
        return np.eye(2)*self.x


def some_function(x, y, z):
    return x, y, z


inst = MyClass(3)

some_function(x=inst, y=inst.y, z=inst.z)

Out[1]:
(array([[ 3.,  0.],
        [ 0.,  3.]]), 6, 9)

我知道我可以将__call__()定义为方法,并通过inst()调用实例。但是有没有办法通过只“调用”没有括号的实例来使用特定方法或某个属性的返回?换句话说,这样实例本身的行为就像它自己的一个属性/属性? 我希望如果可以明确我在寻找什么:-)

期待您的回答。 干杯,并提前感谢您。

马库斯

【问题讨论】:

  • 不,你提议的内容极不可能被添加到语言中。
  • ...只需“调用”不带括号的实例。这是没有意义的。添加括号时调用 is
  • 是的,我知道。我只是不知道如何表达它:-)
  • 不,没有,而且听起来非常不明智。不要偷懒,只写愚蠢的括号。

标签: python class call instance


【解决方案1】:

但是有没有办法通过只“调用”不带括号的实例来使用特定方法或某个属性的返回?

通过键入实例名称,无需任何其他内容,您只是在询问实例(更准确地说,您是在询问绑定到实例的变量的值)。您可以调用多种方法 - 调用覆盖运算符、通过__str__ 打印覆盖、通过__call__ 调用。

但是,如果您为其中一种方法覆盖实例的名称,您希望如何访问该实例?


>>> l = [1, 2, 3]
>>> l = l.pop
# How can you access the original list?

【讨论】:

  • 感谢大家的快速回复。好吧,我想我明白了。所以,我想我必须重写一些运算符,比如 add 等。
猜你喜欢
  • 1970-01-01
  • 2010-11-21
  • 2021-07-04
  • 2015-11-09
  • 2021-11-07
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多