-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Sygnatury typów w funkcjach i metodach #7
Comments
Zgadzam się, zwracany typ powinien być zawsze deklarowany. |
👍 |
👍 A co jeżeli jest None ? |
def foo(key : bytes, deadline: int) -> None: To, że funkcja ma w założeniach nigdy nie zwracać nic interesującego to też przydatna informacja, którą checker może zweryfikować. |
Ja uważam, że w procedurach (por. #6 (comment)), nie powinniśmy deklarować zwracanego typu (w sensie, skoro ta funkcja z założenia ma nic nie zwracać, nie powinniśmy deklarować, że zwraca). Co do funkcji właściwych - zawsze powinniśmy deklarować typ zwracanej przez nie wartości. Warto (ba, należy!) używać, np.:
def foo() -> List[Dict[Text, Dict[any, any]]:
# some code lepiej jest: UserInfoList = List[Dict[Text, Dict[any, any]]]
def foo() -> UserInfoList:
# some code |
👍 pytałem pod kątem jak to ustalamy. Ale zgadzam się też z @dybi że jeżeli ma nic nie zwracać to nie powinniśmy deklarować. Natomiast aliasom jestem przeciwny, moim zdaniem powinniśmy w takiej sytuacji lepiej przeformatować sygnaturę funkcji (podzielić na więcej linii itp.) |
Jeśli chodzi o argumenty, to jak najbardziej można rozbić sygnaturę, ale nie bardzo wyobrażam sobie rozbijanie na kilka lini (skomplikowanej) wartości zwracanej przez funkcję... Zerknijcie na https://mypy.readthedocs.io/en/latest/kinds_of_types.html#type-aliases |
Ja jestem za aliasami jeżeli typ jest bardzo skomplikowany. Dodatkową zaletą jest to, że od razu widać, że dwie funkcje zwracają to samo - bez aliasu trzeba w całości przeanalizować skomplikowaną definicję zwracanego typu. Ponadto te typy się tak łatwo nie rozsynchronizują. No ale też nie nadużywałbym ich. Jeżeli typ jest krótki to lepiej podać go eksplicite. Żeby nie trzeba było szukać go np. w innym pliku. Jeżeli chodzi o procedury to ja bym mimo wszystko był za deklarowaniem typu. Jeżeli nie zadeklarujesz, że twoim celem jest zdefiniowanie procedury to mypy nie bedzie w stanie tego sprawdzić. Przy czym nie będę się przy tym bardzo mocno upierał bo zysk z tego jest marginalny. Ale mimo wszystko jakiś jest. |
@cameel, to ja jeszcze sobie doczytam o |
Jakie jest nasze stanowisko dotyczące deklaracji typów w testach? Chodzi zarówno o funkcje testowe (np. |
Często korzystamy w sygnaturach funkcji i metod z określenia typów pól, które mają być do niej przekazywane, np.
def foo(key : bytes, deadline: int):
natomiast rzadko piszemy, jaki typ jest zwracany. Moim zdaniem dobrze byłoby deklarować również typ wartości zwracanej, np.
def foo(key : bytes, deadline: int) -> str:
The text was updated successfully, but these errors were encountered: