【问题标题】:How to access python static method which contain instance members?如何访问包含实例成员的python静态方法?
【发布时间】:2020-08-06 05:09:33
【问题描述】:

我尝试在 python 中学习静态方法。这是我的代码-

class ABC:
    def __init__(self):
        self.a = 10
        self.b = 20
        self.lst = []

    @staticmethod
    def addNappend(self, c):
        sum = self.a + self.b + c
        self.lst.append(sum)
        print(self.lst)

if __name__ == '__main__':
    ABC.addNappend(30)

运行代码时出错。 [TypeError: addNappend() 缺少 1 个必需的位置参数:'c']

需要改变什么?谢谢大家。

【问题讨论】:

  • 如果是@staticmethod,它不应该有参数self。参数self 指的是正在调用该方法的实例——在静态方法的情况下,没有实例,所以它不应该存在。
  • 我猜的一种方法是在静态方法中实例化 ABC(),然后使用实例的属性。如果你这样做,你最好使用@classmethod。
  • 你不想在这里使用静态方法。
  • 那么,如何从静态成员访问我的实例成员?
  • 您不能从静态方法内部访问实例变量。这是静态方法的核心部分。它们用于调用函数而不需要实例化类。我建议你谷歌“静态/类方法及其目的/限制”

标签: python static-methods


【解决方案1】:

信息很明确:该方法需要两个参数:一个ABC 对象和另一个值;这些是位置参数。由于您将其称为 class 方法,而不是 instance 方法,因此您必须显式提供 ABC 对象。目前,您没有可更改的self;你希望这个电话做什么?

相反,实例化一个对象并使用它:

phone_button = ABC()
phone_button.addNappend(30)

请注意,这与将其设为静态方法完全无关……这在此类中似乎没有任何用途。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2013-10-28
    • 2021-08-19
    • 2021-11-26
    • 2015-05-28
    • 2019-07-13
    • 2023-04-10
    相关资源
    最近更新 更多