2017-10-19 1 views
0

우선, 저는 파이썬에 처음 접했고 모든 정적 유형 언어 인 c/C++/C#에 대한 기본적인 이해를했습니다. 그럼 다음은 파이썬으로 할 수 있습니까?파이썬 정적으로 생성자 생성자?

변수 birthday를 datetime으로 지정합니다. 따라서 인스턴스화 할 때마다 매개 변수를 사용하여 datetime을 전달해야합니다. 형식 오류 :

import datetime 

class Person: 
    """class representing a person.""" 

    def __init__(self, name, sirname, gender, birthday): 
     self.name = name 
     self.sirname = sirname 
     self.gender = gender 
     self.birthday = datetime.date(birthday) 

    def getage(self): 
     """returns age""" 
     today = datetime.date.today() 
     return today.year - self.birthday.year 

은 또한 아래로 난이 나에게 오류 제공

BIRTHDAY = datetime.date(1989, 10, 9) 
NIELSON = Person('Nielson', 'Jansen', 'Male', BIRTHDAY) 

를 다음과 같이 인스턴스화 정수가 필요하다

내 인스턴스화가 잘못 (유형 datetime.date있어) 아니면 내가 파이썬으로 제 머리에서 최대한 빨리 벗어나야합니까?

self.birthday = datetime.date(birthday) 

(. 내가이 인스턴스화의 실수를하면 getage 방법은 항상 대신 임의 무언가의 datetime.date 제시되도록 이것이 무엇을 하시겠습니까 왜)

PS :도 , 나의 용어가 정확하지 않다면, 저를 바로 잡으려고 주저하지 마십시오. :)

+2

'datetime'을 이미 전달했다면, 왜 그것을'datetime'으로 변환하려고합니까? [the docs] (https://docs.python.org/3/library/datetime.html#datetime.datetime)를 참조하십시오. 단일 인수를 전달하면 1 년이 될 것으로 예상됩니다. – jonrsharpe

+2

파이썬에는 정적 유형 검사가 없습니다. 당신은'datetime.date'에 잘못된 타입의 인수를 넘기고 있기 때문에 발생하는 * runtime * type-checking을보고 있습니다 ... –

답변

0

난 당신이 suggested by jonrsharpe

self.birthday = birthday 

self.birthday = datetime.date(birthday) 

를 해결 있으리라 믿고있어.

이제 생일의 종류를 확인하려면, 당신은 생성자의 시작 부분에

assert isinstance(birthday, datetime.date) 

를 작성할 수 있습니다. 그러나이 검사는 어설 션이 실행될 때만 수행되기 때문에 정적 검사는 아닙니다.

+0

몇 가지를 지우고 고맙습니다. –