2017-10-19 11 views
0

まず最初に、私はPythonの初心者で、静的型付けされたすべての言語であるc/C++/c#の基本的な知識を持っています。だから次は、Pythonで行うことができますか?Pythonの静的型付きコンストラクタ?

変数birthdayをdatetimeにします。だから私はインスタンス化するたびに、私はパラメータでdatetimeを渡す必要があります。

さらに下

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

次これは私にエラーを与えるとして、私はインスタンス化

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 

TypeError例外:整数が必要です(型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

Pythonには静的型チェックがありません。あなたは 'datetime.date'に間違った型の引数を渡しているので発生している*ランタイム*型チェックを見ています... –

答えて

0

私はあなたがsuggested by jonrsharpeとして

self.birthday = birthday 

self.birthday = datetime.date(birthday) 

を修正することを想定しています。

今では誕生日の種類を確認したい場合は、コンストラクタの先頭に

assert isinstance(birthday, datetime.date) 

を書くことができます。ただし、アサーションが実行されるときにのみチェックが実行されるため、静的チェックではありません。

+0

いくつかのことをクリアしました、ありがとうございます。 –

関連する問題