2017-10-19 194 views
0

首先,我是Python新手,對c/C++/c#有基本的瞭解,這些都是靜態類型語言。那麼可以在Python中完成以下任務嗎?Python靜態類型的構造函數?

我希望變量生日是一個日期時間。所以,每當我實例化我必須通過參數傳遞一個日期時間。

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)

是我的錯實例化或者我應該用python儘快獲得以下內容:

self.birthday = datetime.date(birthday) 

(爲什麼我想這樣做是爲了讓getage方法始終呈現一個datetime.date,而不是隨機的東西,如果我做一個實例化的錯誤)

PS:還如果我的術語不正確,請毫不猶豫地糾正我。 :)

+2

如果你已經傳入了'datetime',你爲什麼然後試圖將它轉換爲'datetime'?請參閱[文檔](https://docs.python.org/3/library/datetime.html#datetime.datetime) - 如果您傳遞一個參數,則預計會是一年。 – jonrsharpe

+2

Python沒有靜態類型檢查。你看到*運行時*類型檢查,這是發生,因爲你正在傳遞一個錯誤類型的參數到'datetime.date' ... –

回答

0

我假設你解決

self.birthday = datetime.date(birthday) 

self.birthday = birthday 

suggested by jonrsharpe。現在

,如果你想查詢生日的類型,你可以在構造函數中的開頭寫

assert isinstance(birthday, datetime.date) 

。然而,這不是一個靜態檢查,因爲檢查只會在斷言運行時執行。

+0

清除了一些東西,謝謝。 –