我正在尝试学习课程,有人可以向我解释为什么这段代码不起作用。我想当从一个类调用一个函数时,“self”会自动被省略,但是解释器告诉我缺少参数“a”(他认为self = 10)。
#! coding=utf-8
class test:
def __init__(self):
"do something here"
def do(self,a):
return a**2
d = test.do
print(d(10))
答案 0 :(得分:7)
首先实例化该课程:
d = test().do
print(d(10)) # prints 100
test.do
是一个未绑定的方法,绑定了test().do
。这个帖子解释了不同之处:Class method differences in Python: bound, unbound and static。
答案 1 :(得分:3)
您必须首先实例化该类:
d = test()
然后你可以调用一个方法:
print(d.do(10))
答案 2 :(得分:2)
如果你想静态使用方法,你必须在python中声明它
#! coding=utf-8
class test:
def __init__(self):
"do something here"
@staticmethod
def do(a):
return a**2
d = test.do
print(d(10)) #and that's work
答案 3 :(得分:0)
由于您尚未实例化类(创建的奇特术语),因此无法将方法分配给任何随机变量。就像已经说过的那样,你必须首先创建对象,同时确保你调用的方法是你以某种方式调用或连接到类的类的一部分(比如创建另一个类然后用当前类传递该类) 。因此,您应首先输入d=test()
,然后输入d.do()
。
另外,请记住在你的方法声明中你创建了一个参数,所以你所做的事情本身就是错误的,因为当你声明了do函数时,你应该在括号内放入你想要发送给方法的数字来计算它的广场。因此,您键入test.do(10)
,然后通过自引用将10发送到要执行的方法,无论您告诉它做什么。
还有一件事:虽然这不是一个大问题,但如果你的所有课程名称都以大写字母开头,这会有所帮助,因为这通常是“pythonic”做事的方式,它也使你的代码更多更容易阅读,因为当你第一次打电话给这个班级时,有人可能会把它误认为是普通的功能
答案 4 :(得分:0)
class test:
def __init__(self):
"do something here"
def do(self,a):
return a**2
def __call__(self,a):
return self.do(a)
a = test
test.do(a,10)
#or
a = test().do
a(10)
#or
a = test()
test.do(a,10)
#or
a = test()
print(a(10))