시간을 유지하는 방법에 몇 가지 단점이있는 응용 프로그램의 데이터를 처리하고 있습니다. 더 단순한 단점 중 하나는 월 + 일 대신 "일년"(1 월 1 일, 2 월 1 일은 32 등)을 사용한다는 것입니다. 그래서 기본 datetime 클래스에서 상속 받고 몇 가지 사용자 정의 메서드가있는 자체 날짜 클래스를 만들고 싶습니다. 나는이 낮 시간에 전화하고있다. 이상한 포맷으로 출력하는 메소드 외에, 나는 이상한 포맷을 주간에 입력하는 메소드가 필요하다. .fromordinal() 메서드가 datetime에서 호출 될 수있는 것처럼, 나는 낮에서 호출 할 수있는 .fromdayofyear() 메서드가 필요합니다. 지금까지 내가 가지고 :Python의 사용자 정의 클래스 : 인스턴스에서 메소드를 호출해야합니까?
import datetime
class daytime(datetime.datetime):
@property
def dayofyear(self):
return (self.date - datetime.date(self.year,1,1)).days + 1
def fromdayofyear(year,dayofyear):
return datetime(year,1,1)+datetime.timedelta(dayofyear-1)
을 문제는 fromdayofyear 클래스이기 때문에, 그것은 어떤 방법을 수행하기 위해 낮의 인스턴스를 필요로한다는 것이다.
>>> from utils import daytime
>>> day = daytime.fromdayofyear(2010,32) #should give a datetime, Feburary first
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method from_datetime() must be called with DayTime instance as first argument (got str instance instead)
>>>
이 작업을 수행하는 일련의 기능을 쉽게 작성할 수는 있지만 맞춤 클래스를 만드는 시점부터 시작해야합니다. 아마 여기 수업을 사용하지 말아야한다는 것을 알았습니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까?
편집 :
는 여기가에 정착 내용은 다음과 같습니다
import datetime
class daytime(datetime.datetime):
@property
def dayofyear(self):
return (self.date - datetime.date(self.year,1,1)).days + 1
@classmethod
def fromdayofyear(cls,year,dayofyear):
dt = cls(year,1,1)+datetime.timedelta(dayofyear-1)
return cls(dt.year,dt.month,dt.day)
어떤 끔찍한 '특질'- 당신이 윤년을 고려 있는지 확인하십시오! –
더 끔찍할 수 있습니다 - 16 비트 날짜 형식을 회상합니다. 높은 7 비트는 1900 년 이후의 해 였고, 낮은 9 비트는 일년이었습니다. HP3000 MPE 운영 체제 IIRC의 어딘가. –