【问题标题】:Can One Write Methods for Three Instances of Same Class一个类的三个实例可以写一个方法吗
【发布时间】:2021-03-26 15:12:12
【问题描述】:

我出于好奇而问这个问题,我要问的问题可能有很多解决方法。

当你在python中创建一个类时,你可以通过使用“self”和“other”关键字来定义获取这个类的两个实例的方法,例如

class MyClass():
    def __init__(self, x):
        self.x = x

    def __add__(self, other):
        return self.x + other.x
        

你能对同一个类的 3 个或更多实例做同样的事情吗?也就是说,有没有像“self”、“other”、“another”这样的东西?

【问题讨论】:

  • 您可以编写任何您想要的此类方法,只是没有标准的__dunder__ 方法可以映射到任何运算符(三操作数运算符甚至看起来像什么?)。但是def my_method(self, other, another) 完全有效……
  • other 在这里不是关键字——它只是一个任意标识符,有人选择用作第二个参数的名称。 (self 实际上是相同的,但是关于将其用作方法的第一个参数有一个更严格的约定。)
  • 我明白了,因为我的编辑突出了selfother,我认为这些是关键字。如果需要,我将使用:selfotheranotheryetanother。在我耳边听起来真的很性感。
  • 考虑def foo(self, *args)...
  • 更性感!谢谢

标签: python class methods self


【解决方案1】:

您可以创建一个列表,其中包含可以从循环中调用的不同类实例的参数。

class MyClass():
    def __init__(self, x):
        self.x = x

    def __add__(self, others):
        temp = self.x
        for obj in others:
            temp += obj.x
        return temp
        
x = MyClass(5)
y = MyClass(5)
z = MyClass(5)

print(x.__add__([y, z])) # 15

【讨论】:

  • 并没有真正回答我的问题,因为您的代码中的others 必须是可迭代的,我想专门输入MyClass,而不是MyClass'es 的列表。不过,上面的评论为我清除了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 2012-02-04
  • 2012-03-18
  • 1970-01-01
相关资源
最近更新 更多