2013-01-03 5 views
0

Possible Duplicate:
Class method differences in Python: bound, unbound and static파이썬 클래스 선언에서 foo를 부를 수 있습니까?

class A: 
    def foo(): 
     print 'hello world' 
    def foo1(self): 
     self.foo() 

a = A() 
a.foo1() 

그 클래스에 개인이었다 일부 기능을 사용하여보고 있었다. 그 유일한 방법은 규칙에 따라 갈 것입니다 : 그 함수 이름 앞에 '_'접두사를 붙이고 여전히 첫 번째 인수를 가지고 있다고 가정하십시오. self

그러나 foo()은 완전히 쓸모가 없습니까?

+0

'a.foo.im_func'를 사용하여 바운드 메소드에서 함수를 가져올 수 있습니다.하지만 올바른 방법은'@staticmethod'로 만드는 것입니다. – katrielalex

답변

0

A.foo()으로 전화 해보세요. 출력은 'hello world'입니다.

파이썬 2에서는 TypeError이 나오기 때문에 파이썬 3에서만 작동합니다.

+0

오, 안됩니다. TypeError : 바인드되지 않은 메서드 foo()를 인스턴스와 함께 호출해야합니다 ... 등 – Spacedman

+0

파이썬 3에서 직접 작동했기 때문에 확실히 작동합니다. – Volatility

+0

예,하지만 먼저 'print' 문을 함수로 변경해야하므로 게시 된 코드는 작동하지 않습니다. – Duncan

2

중요한 모든 용도에 해당합니다. 메소드의 다양한 속성을 통해 원시 함수를 가져올 수 있지만 클래스에 이와 같은 것을 가짐에있어 중요한 것은 없습니다.

>>> A.foo.im_func() 
hello world 
0

예, 꽤 쓸모가 없습니다. Python 2.x에서 예외를 throw하지 않고 호출하는 유일한 방법은 클래스의 내부에서 함수를 추출한 다음 호출하는 것입니다. Python 3.x (print을 변환 한 것으로 가정)에서 A.foo()을 직접 호출 할 수 있습니다.

foo()이 실제로는 self 인수를 필요로하지 않는 경우 메소드가 아니어도됩니다. 클래스가 정의 된 것과 동일한 모듈에서 함수로 만듭니다.

관련 문제