2013-08-30 3 views
1

Я пытаюсь узнать о классах, может кто-нибудь объяснить мне, почему этот код не работает. Я думал, что при вызове функции из класса «self» автоматически опускается, но интерпретатор говорит мне, что аргумент «a» отсутствует (он считает self = 10).Python 3: Вызов функции из класса, self

#! 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 отправляется ссылкой на метод, который нужно выполнить, что вы ему сказали.

Еще одна вещь: хотя это не огромная сделка, она помогает, если все имена классов начинаются с заглавной буквы, так как обычно это «питонический» способ делать вещи, а также делает ваш код гораздо легче читать, потому что, когда вы первый называется класс, кто-то мог бы легко спутать это для обычной функции

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)) 
Смежные вопросы