2011-10-07 2 views
1

에서 클래스의 메소드를 호출 :내가과 같이 다른 클래스에서 파이썬의 메소드를 호출 찾고 있어요 파이썬

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

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

안녕하세요 ('세계') '안녕하세요'를 반환합니다. 내가 여기서 뭔가 잘못했음을 알고 있는데, 누군가 그게 뭔지 알아? 나는 그것이 내가 수업을 다루는 방식일지도 모른다라고 생각한다. 그러나 나는 아직 그것 주위에 나의 머리를 얻지 않는다.

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

을하거나 foo 인스턴스의 어떤 부분을 사용하지 않는 경우 정적 방법과 방법을 선언

+0

을, 나는 우리가 2.5에있어 코드에서 잘못된 일부 구문, – lostyzd

+0

아닌 구문 문제가 있다고 생각 그것은 아래의 약 4 번 답변을 '자체'문제였습니다;) –

답변

6

파이썬에서 비 정적 메서드는 명시 적으로 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)를 호출하면 파이썬은 두 개의 인수 (selfname)를 foo.bar()에 전달하려고 시도하지만 메소드는 하나만 사용합니다.

+0

고마워, 난 단지 과거에 최소한의 비단뱀을 해 봤어! 그래도 고마워. –

3

당신은 당신의 방법 정의에 인스턴스 매개 변수가 누락되었습니다. 차이점 인 here 사이에 좋은 설명이 있습니다.

3

클래스 메서드가되어야하는 경우에 대한 classmethod 데코레이터와 cls 인수를 사용해야합니다. bar 하지만이 경우에는 의미가 없으므로 대신 staticmethod을 원했을 수 있습니다.

+3

그리고'classmethod'는 첫 번째 매개 변수로 클래스 (일반적으로'cls'라고 부름)를 가지고 있습니다. 그래서 그것도 추가해야합니다. – delnan

3

당신은 일반적으로 self라는 이름의 인스턴스 매개 변수를 놓쳤다 : 나는 파이썬 2.7을 사용하고

class foo(): 
    def bar(self, name): 
     return 'hello %s' % name 
관련 문제