方法将“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
是参数。你没有传入x
。 test
是一个类,而不是一个保险。致电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中,当作为类方法定义中的默认值传递时,赋值运算符是否会访问类或实例变量?