2013-08-30 51 views
1

我想了解类,有人可以向我解释为什么这段代码不工作。我想当从一个类中调用一个函数时,“self”会自动省略,但解释器告诉我缺少了参数“a”(他认为self = 10)。Python 3:从类,自我调用函数

#! coding=utf-8 
class test: 
    def __init__(self): 
     "do something here" 
    def do(self,a): 
     return a**2 

d = test.do 
print(d(10)) 

回答

3

你必须先初始化类:

d = test() 

,那么你可以调用一个方法:

print(d.do(10)) 
+0

-1,这不是有效的Python 3 – unwind

+0

@unwind - 以什么方式? – Random832

2

,如果你想使用方法静态你有蟒蛇

#! 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 
0

宣布它,因为你还没有实例化的类(用于创建看中的术语),你不能分配方法,任何随机变量。就像已经说过的那样,您必须先创建对象,同时确保您调用的方法是您调用的类的一部分或以某种方式连接到类(例如创建另一个类,然后将该类与当前类进行通信) 。所以你应该先输入d=test(),然后输入d.do()。 另外,请记住,在您的方法声明中,您创建了一个参数,因此无论如何,您所做的都是错误的,因为当您声明do函数时,应该在括号内放入要发送给方法的数字计算其平方。所以你输入test.do(10),然后通过自我引用发送10来完成你要做的任何事情。

还有一件事:尽管这不是一个大问题,但是如果所有的类名都以大写字母开头,这很有帮助,因为这通常是“pythonic”做事的方式,它也会使您的代码更容易阅读,因为当你第一次调用的类,有人可以很容易误认为是一个普通的功能

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))