方法将“self”视为参数变量

Posted

技术标签:

【中文标题】方法将“self”视为参数变量【英文标题】:Method is considering "self" as an argument variable 【发布时间】:2021-11-13 06:00:06 【问题描述】:

我有两个类,在第二个类中我定义了一个方法,该方法从第一个类中实例化一个对象,为其属性分配一个值,然后打印它。

问题是当我使用以下方法调用函数时:

test.Pprint(5)

我得到了错误。

TypeError: Pprint() missing 1 required positional argument: 'x'

我的代码:

class node():
    def __init__(self, test):
        self.test = test
    
class test():
    def Pprint(self, x):
        rootnode = node(x)
        print(rootnode.test)

当我删除关键字self 时,一切都按预期进行。据我所知self 不应被视为论点。有什么问题?

【问题讨论】:

self 是参数。你没有传入xtest 是一个类,而不是一个保险。致电test().Pprint(5) @MadPhysicist insurance -> instance @MattDMo。自动更正很有趣:) 【参考方案1】:

这是蟒蛇的魔法。当从类对象 test.Pprint(x) 调用时,它是一个需要 2 个参数的函数。当从实例调用时,test().Pprint(x)python 将其转换为方法并自动添加对该实例的引用作为第一个参数。在您的情况下,Pprint 不使用该类的任何功能,因此它可以是静态方法。

class test:
    @staticmethod
    def Pprint(x):
        rootnode = node(x)
        print(rootnode.test)

现在它可以在类或实例中工作

test.Pprint(x)
t = test()
t.Pprint(x)

【讨论】:

那非常有帮助!

以上是关于方法将“self”视为参数变量的主要内容,如果未能解决你的问题,请参考以下文章

python中的self

在Python中,当作为类方法定义中的默认值传递时,赋值运算符是否会访问类或实例变量?

使用类自变量作为默认类方法参数[重复]

python 面向对象(成员,静态,类)的(变量,方法)区别

廖雪峰Python总结4

Python 面向对象相关