문제

내 상황은 다음과 같습니다.

import foo, bar, etc

frequency = ["hours","days","weeks"]

class geoProcessClass():

    def __init__(self,geoTaskHandler,startDate,frequency,frequencyMultiple=1,*args):
        self.interval = self.__determineTimeDelta(frequency,frequencyMultiple)

    def __determineTimeDelta(self,frequency,frequencyMultiple):
        if frequency in frequency:
            interval = datetime.timedelta(print eval(frequency + "=" + str(frequencyMultiple)))
            return interval
        else:
            interval = datetime.timedelta("days=1")
            return interval

시간 간격을 동적으로 정의하고 싶습니다 timedelta, 그러나 이것은 작동하지 않는 것 같습니다.

이 작업을 수행하는 구체적인 방법이 있습니까? 여기에 유효하지 않은 구문이 있습니다.

더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

구문을 사용하여 동적 인수가있는 함수를 호출 할 수 있습니다. func(**kwargs) 어디 kwargs 명명 된 인수에 대한 이름/값 매핑 사전입니다.

나는 또한 글로벌로 이름을 바꿨습니다 frequency 목록 frequencies 라인 이후 if frequency in frequency 전적으로 의미가 없었습니다.

class geoProcessClass():
    def __init__(self, geoTaskHandler, startDate, frequency, frequencyMultiple=1, *args):
        self.interval = self.determineTimeDelta(frequency, frequencyMultiple)

    def determineTimeDelta(self, frequency, frequencyMultiple):
        frequencies = ["hours", "days", "weeks"]

        if frequency in frequencies:
            kwargs = {frequency: frequencyMultiple}
        else:
            kwargs = {"days": 1}

        return datetime.timedelta(**kwargs)

가치가있는 것에 대해 문체 적으로는 일반적으로 발신자가하는 오류를 조용히 수정하기 위해 눈살을 찌푸립니다. 발신자가 유효하지 않은 인수로 전화하면 계속 삐걱 거리는 것을 시도하기보다는 즉시 그리고 큰 소리로 실패해야 할 것입니다. 나는 그것에 반대하는 것을 추천합니다 if 성명.

가변 길이 및 키워드 인수 목록에 대한 자세한 내용은 다음을 참조하십시오.

다른 팁

당신의 사용 print eval(...) 약간 과도하게 복잡하게 보입니다 (그리고 언급 한대로 잘못).

키워드 인수를 함수에 전달하려면 그냥하십시오.

interval = datetime.timedelta(frequency = str(frequencyMultiple)

키워드 인수가 표시되지 않습니다 frequency 그러나 그것은 별도의 문제 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top