2014-12-28 2 views
1

에서 todayreturntime을 어떻게 사용할 수 있습니까? 당신이 당신의 영화 클래스를 사용할 때 __init__()는 outside.But에서 클래스를 사용하는 것이 인수를 취하고 있기 때문이다파이썬, 함수 밖에서 함수의 일부분을 사용하는 방법

import datetime 

class Movie(object): 
def __init__(self,title): 
    self.title = title 

def time_of_return(self): 
    self.today = today 
    self.returntime = returntime 

    today = datetime.datetime.now() 

    returntime = today + datetime.timedelta(days=30) 

def return_fee(Movie): 
    fee = -2 
    delta = today - returntime 
+3

는'self.today'와'__init__'에'self.returntime'을 추가 하시겠습니까? 그러면'return_fee'에서'self.today'와'self.returntime'을 호출 할 수 있습니다. 'time_of_return' (앞에서처럼)에 정의하면'time_of_return'을 호출 한 후에 만'return_fee'를 호출 할 수 있습니다. – Bjorn

+1

'return_fee()'메소드의'Movie' 매개 변수의 요점은 무엇입니까? – glglgl

+2

이 코드가 작동하지 않는 이유는 변수 범위 때문이지만 return_fee가 Movie 클래스의 메서드로 의도 된 경우 (다른 메서드처럼 들여 쓰기가 나타나는 것처럼 보일 경우) 문법적으로 약간의 불일치가 있습니다. 'Movie'매개 변수를 'self'(모든 경우에 이름 충돌을 피하기 위해)로 변경하는 것이 좋습니다. 그런 다음 클래스 인스턴스의 변수 (self.fee, self.today, self.returntime)를 사용하여 조언합니다. time_of_return 메소드. 'Movie'를 'self'로 변경하지 않으면 Movie.fee는 인스턴스가 아닌 정적 클래스 변수를 참조합니다. –

답변

1

나는 이런 식으로 할 것 :

class Movie(object): 
def __init__(self,title): 
    self.title = title 

def get_times(self): 
    now = datetime.datetime.now() 
    return now, now + datetime.timedelta(days=30) 

def time_of_return(self): 
    now, returntime = self.get_times() 
    return returntime 

def return_fee(self): 
    fee = -2 
    now, returntime = self.get_times() 
    delta = now - returntime 
    return <whatever based on fee and delta> 
0
class Movie(object): 
def __init__(self,title,today,returntime):#<---- 
    self.title = title 

def time_of_return(self): 
    self.today = today 
    self.returntime = returntime 

    today = datetime.datetime.now() 

    returntime = today + datetime.timedelta(days=30) 

def return_fee(Movie): 
    fee = -2 
    delta = today - returntime 

, 당신은 인수 것을 정의해야합니다.

1

당신이 그들을 설정 __init__에서 time_of_return를 호출 한 후 self와 접두사, 예를 속성으로 time_of_returnreturn_fee을 원하는 경우 :

class Movie(object): 
    def __init__(self,title): 
     self.title = title 
     self.time_of_return() 

    def time_of_return(self): 
     self.today = datetime.datetime.now() 
     self.returntime = today + datetime.timedelta(days=30) 

    def return_fee(Movie): 
     fee = None 
     delta = self.today - self.returntime 
     # ... presumably do something else 

을 또는 (특히, today은 시간이 지남에 따라 변경 될 수 있기 때문에), 전화

class Movie(object): 
    def __init__(self,title): 
     self.title = title 

    def time_of_return(self): 
     today = datetime.datetime.now() 
     returntime = today + datetime.timedelta(days=30) 
     return today, returntime 

    def return_fee(Movie): 
     fee = None 
     today, returntime = self.time_of_return() 
     delta = today - returntime 
     # ... presumably do something else 

그것은 A의 : 및 return_fee 내에서 기능 time_of_return 확실히 뭔가를 반환 할 그건 그렇고, 4 개의 스페이스로 코드를 들여 쓰는 것이 좋습니다. None (또는 0)은 fee의 더 나은 기본값입니다.

관련 문제