【问题标题】:Python required positional argument when use "self" [duplicate]使用“self”时Python需要位置参数[重复]
【发布时间】:2017-07-11 01:04:32
【问题描述】:

我读到方法的第一个参数是调用该方法的实例。 我不明白为什么我写这个

class A:
    def printName(self, name):
        print(name)

A.printName("asd")

我收到错误 TypeError: printName() missing 1 required positional argument: 'name'。 我错过了什么?

【问题讨论】:

    标签: python arguments self


    【解决方案1】:

    您需要创建一个类实例,然后在该实例上调用方法:

    class A:
        def printName(self, name):
            print(name)
    
    class_instance = A()
    class_instance.printName("asd")
    

    【讨论】:

    • 感谢您的回答。我真的不明白 A.printName("asd") 不是实例
    • A 是一个类对象,而 A() 是一个新的类实例:
    • 查看文档:docs.python.org/2/tutorial/classes.html 了解类的基础非常重要。玩得开心!
    【解决方案2】:

    如果你想在不创建该类的实例的情况下调用printName(),则可以使用staticmethod

    class A:
        @staticmethod
        def printName(name):
            print(name)
    
    A.printName('hello')
    

    【讨论】:

    • 感谢您的回答。你能解释一下python中的静态方法是什么,为什么它不需要'self'吗?我试过你的代码,即使没有@staticmethod它也能工作,为什么会这样?很抱歉有这么多问题,但我很难理解“自我”论点是如何工作的
    • @akerbeltz:) staticmethods 是绑定到类而不是对象的方法。他们不需要类 instance@staticmethod 告诉我们正在使用staticmethod。在早期版本中,编写 staticmethod 的语法有所不同。您可以谷歌了解更多信息
    • self 相当于 'this' 对象。 staticmethod 不适用于绑定到类的不同实例。
    • 感谢您的回答!你帮了我很多。有一点我完全不明白。当我写 A.printName('hello')a=A.printName('hello') 时,我没有创建 A 类的实例?
    • @akerbeltz :) 不,您不是以任何一种方式创建实例。您可以创建一个类似instance_A = A() 的实例。如果答案有帮助,请将答案标记为接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多