2017-09-04 3 views
-1

지금 당장 클래스에있는 메소드가 간단하지만 실제로 호출하는 데 어려움이 있습니다. 항상이 출력에 이르게파이썬에서 메소드를 호출 할 수 없습니다.

print(str(ll.size())) 

:

def size(self): 
    return self.size 

내가 사용하는 데 필요한거야 호출은 이것이다 내가이 방법을 여러 번 들었다

print(str(ll.size())) 
TypeError: 'int' object is not callable 

I size() 메서드를 설정해 봤지만 결코 이해할 수 없었습니다. 누군가 나에게 이것을 호출 할 수있는 방법을 만드는 올바른 방법을 보여줄 수 있고 나중에 참조 할 수있는 차이점을 설명 할 수 있습니까? 감사!

+2

'size' 메소드와'size'라는 정수형 속성을 동시에 가질 수 없습니다. 그들은 같은 이름입니다. 'self.size = 1'을 설정하면 메소드를 숫자로 바꿉니다. – larsks

+0

문제는 아주 간단합니다. 인스턴스 필드 이름'size'는 아마도 정수이고, 메소드 이름은'size'입니다. size 속성에 액세스하려고하면 인스턴스 속성이 메소드보다 우선합니다. 고쳐? 속성 중 하나의 이름을 바꾸기 만하면됩니다. –

+0

은 속성 크기와 메소드 크기를 가지고있는 것처럼 보입니다. - 속성을'_size' 또는 메소드가 필요한 경우 이름을 바꾸는 방법은 어떻습니까? – karthikr

답변

3

클래스에는 size이라는 두 개의 속성이 있는데, 하나는 정의한 메소드이고 다른 하나는 메소드 내부에서 호출하는 속성입니다.

오류 메시지에서 두 번째 메시지가 호출되었음을 알 수 있습니다. 따라서 ll.size은 int이고 ll.size()은 int를 '호출'합니다.

size 이외의 방법으로 메서드의 이름을 바꾸고 작동하는지 확인하십시오.

1

인스턴스 변수 이름 크기과 인스턴스 메서드 이름 크기을 모두 가질 수 없습니다.

어떻게 구분합니까? 여기

인스턴스 변수보다 우선

가 정의했기 때문에 첫 번째 (당신은 아마 개체 __dict__ 먼저 나타나는 따라서 귀하의 __init__ 방법 self.size = x과를) 호출 따라서 int되지 않고있다.

그냥 함수 정의하지 않고 직접 속성을 사용하는 size 값에 할 수있는 특별한 아무것도없는 경우 : 당신이 (여기 내 사소한 예에 반대) 뭔가 더 복잡한 를 확인하려면

class Foo: 
     def __init__(self, somearg): 
      # ... 
      self.size = somearg * 3 
>>> foo = Foo(3) 
>>> foo.size 
9 

사용하십시오 property :

class Foo: 
    def __init__(self, somearg): 
     # ... 
     self._size = None 
     self._someattr = somearg 
    # ... 
    @property 
    def size(self): 
     if self._someattr > 2: 
      return self._someattr * 3 
     return 1 
>>> foo = Foo(3) 
>>> foo.size 
9 
>>> bar = Foo(2) 
>>> bar.size 
1 

완전히 속성 장식의 장점은 this tutorial

,617을 읽고, 이해하기
관련 문제