2013-07-19 4 views
-1

나는 내가 date.now.hour를 호출 할 때 시간을 표시 할 그러나 나는이 내 코드입니다전화 속성 방법 파이썬

AttributeError: 'function' object has no attribute 'hour' 

이 오류를 얻을 : 내 작업이

만들기가

#!/usr/bin/python 

class Date: 
    def now(self): 
     self.hour = "hour" 
     print "Now" 

    def __call__(self, string): 
     print string  

date = Date() 
date('hello') # print hello 
date.now.hour # print hour 

입니다

에게 이 작업을 수행 할 수있는 수업 :

date.now() - 출력 : 'now'

date('hai') - 출력 : 'hai'

date.now 출력 : 'now'

date.now.hour 출력 : 'hour'

답변

2

- 당신의 작업 중 하나가 이미 완료 :이 같은 __init__ 방법을 재정의한다 - 아직도 남아 무엇 output: 'hai'

date('hai')

date.now() - 출력 : 'now'

date.now - 출력 : 'now'

date.now.hour 출력 : 'hour'

그래서 date.now에만 별도의 클래스로 수행 할 수 있습니다 요구 사항 꽤 많은 :

class Now(object): 
    def __str__(self): return ... 
    def __call__(self): return ... 
    hour = property(lambda self: 'hour') 

또는 이와 비슷한 내용입니다.

이 수업은 class Date에서 사용할 수 있습니다.


또 다른 옵션은 nowclass Date의 재산이하는 것입니다, 그러나 이것은 유사한 작동합니다. 위와 같이 class Now이 필요하지만, 다음과 같이 사용하십시오.

+0

그래서 두 클래스를 사용해야합니까? – kangfend

+0

고마워요. .. :) – kangfend

5

을 그냥 전화 date.now() - 당신은에 액세스 할 수 없을거야 hour이 속성은 객체의 속성이기 때문에 함수의 속성.

date.hour을 수행하면 hour이 표시됩니다. 당신이 비록 무엇을해야

>>> date.hour 
'hour' 

는 클래스의 __init__ 기능에서 이러한 속성을 모두 설정됩니다.

class Date(): 
    def __init__(self, hour): 
     self.hour = hour 

    def now(self): 
     print self.hour #if you will 

    def __call__(self string): 
     print string 
+0

나는 과제가 있습니다. 이 작업을 수행 할 수있는 클래스를 만드십시오.

 date.now() output: 'now' date('hai') output: 'hai' date.now output: 'now' date.now.hour output: 'hour' 
kangfend

+0

이 구문은 루비 또는 VB에서 무언가를 사용하여()를 사용하지 않고 인자없는 함수를 호출합니다.이 구문은 함수를 함수로 설정하지 않으면 파이썬에서 수행되지 않습니다. 반환 된 문자열 값을 호출 할 수 없기 때문에'date.now()'는 실패 할 것이다. – PaulMcG

2

now 기능은 클래스에 속성 hour을 설정하는 것입니다. 다음과 같은 경우에는 시간이 인쇄 된 표시되어야합니다

date = Date() 
date('hello') # print hello 
date.now() # print Now 
print date.hour # print hour 
2

nowDate 클래스의 방법, hour는 속성입니다. 함수가 아닌 객체에 시간을 할당합니다 (self).

그러나 메소드에서 인스턴스 속성을 초기화하는 것은 오류가 발생하기 쉽고 나쁜 습관입니다.당신은 아주 가까운

class Date: 
    def __init__(self): 
     self.hour = 'hour' 
1

date.hour 올바른 방법입니다 :

date = Date() 
date.now() 
date.hour 
+0

date.now.hour를 호출 할 때 'hour'문자열을 출력하는 작업이 있습니다. – kangfend

+1

의미가 없습니다. 당신이 그것을 가지고있는 것처럼 당신이 그것을 해석하고있는 것처럼 당신이 할 수있는 일을 게시 할 수 있습니까? 그것은 저에게 오해의 어떤 종류 같이 보인다. date.now() 출력 : '지금' 날짜 ('하이') 출력 : '하이' 날짜 (당신이하지 '호출'문자열 수) – lolopop

+0

는이 작업을 수행 할 수있는 클래스를 확인합니다. 지금 출력 : 'now' date.now.hour 출력 : 'hour' – kangfend