Вызов метода класса в python - PullRequest
1 голос
/ 07 октября 2011

Я хочу вызвать метод в Python из другого класса, например так:

class foo():
    def bar(name):
        return 'hello %s' % name

def hello(name):
    a = foo().bar(name)
    return a

Где hello ('world') вернул бы 'Hello World'.Я знаю, что я сделал что-то не так, кто-нибудь знает, что это такое?Я думаю, что это может быть способ, которым я обращаюсь с классами, но я еще не сошел с ума.

Ответы [ 4 ]

6 голосов
/ 07 октября 2011

В Python нестатические методы явно принимают self в качестве первого аргумента.

foo.bar() любой должен быть статическим методом:

class foo():
    @staticmethod
    def bar(name):
        return 'hello %s' % name

или должен принять self в качестве первого аргумента:

class foo():
    def bar(self, name):
        return 'hello %s' % name

В результате получается, что в вашем коде name интерпретируется как параметр self (который просто называется чем-тоеще).Когда вы вызываете foo().bar(name), Python пытается передать два аргумента (self и name) foo.bar(), но метод принимает только один.

3 голосов
/ 07 октября 2011

Вы пропустили параметр экземпляра, обычно называемый self:

class foo():
    def bar(self, name):
        return 'hello %s' % name
3 голосов
/ 07 октября 2011

Если это должен быть метод класса, то вы должны были использовать декоратор classmethod и аргумент cls для bar.Но в этом случае это не имеет смысла, поэтому вы могли бы вместо этого захотеть staticmethod.

3 голосов
/ 07 октября 2011

В определении метода отсутствует параметр экземпляра:

class foo():
    def bar(self, name):
        return 'hello %s' % name

или если вы не собираетесь использовать какую-либо часть экземпляра foo, объявите метод как статический метод.Есть хорошее объяснение различий здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...