উত্তর:
আপনি খুঁজছেন Optional
।
যেহেতু আপনার রিটার্নের ধরনটি datetime
(যেমন প্রত্যাবর্তিত হয়েছে datetime.utcnow()
) হতে পারে বা None
আপনার ব্যবহার করা উচিত Optional[datetime]
:
from typing import Optional
def get_some_date(some_argument: int=None) -> Optional[datetime]:
# as defined
টাইপিংয়ের ডকুমেন্টেশন থেকে Optional
শর্টহ্যান্ড:
Optional[X]
সমতূল্যUnion[X, None]
।
যেখানে Union[X, Y]
ধরণের মান X
বা এর অর্থ Y
।
অন্যরা যদি হোঁচট খায় Optional
এবং এর অর্থ বুঝতে না পারে এমন উদ্বেগের কারণে আপনি যদি সুস্পষ্ট হতে চান তবে আপনি সর্বদা ব্যবহার করতে পারেন Union
:
from typing import Union
def get_some_date(some_argument: int=None) -> Union[datetime, None]:
তবে আমি সন্দেহ করি এটি একটি ভাল ধারণা, Optional
একটি সূচক নাম এবং এটি কয়েকটা কীস্ট্রোক সংরক্ষণ করে।
@ মাইকেল0 Union[T, None]
x2a এর মন্তব্যে যেমন উল্লেখ করা হয়েছে তেমন ট্রান্সফর্ম হয়েছে Union[T, type(None)]
যাতে type
এখানে ব্যবহারের দরকার নেই।
দৃশ্যত এগুলি পৃথক হতে পারে তবে ক্রমগতভাবে, উভয় ক্ষেত্রেই ফলাফলটি একই রকম হয় ; * এUnion[datetime.datetime, NoneType]
সঞ্চিত ধরণ হবে :get_some_date.__annotations__
>>> from typing import get_type_hints
>>> print(get_type_hints(get_some_date))
{'return': typing.Union[datetime.datetime, NoneType],
'some_argument': typing.Union[int, NoneType]}
*typing.get_type_hints
অবজেক্টের __annotations__
বৈশিষ্ট্যটি সরাসরি অ্যাক্সেস না করে দখল করতে ব্যবহার করুন ।
Optional[T]
টাইপ কার্যকরী প্রোগ্রামিং কমিউনিটি সুপরিচিত হয়। পাঠক কেবল এটির অর্থ বুঝতে পারবেন না Union[T, None]
, তবে ব্যবহারের ধরণটিও স্বীকার করবেন যে কোনও অর্থবহ উত্তর না থাকলে ত্রুটি রয়েছে, বা ফলাফলটি পাওয়া যায়নি তবে ফাংশনটি কোনওটিই ফিরিয়ে আনবে না।
Union[datetime, type(None)]
করতে পারেনUnion[datetime, None]
- পিইপি 484 অনুসারে ,None
কোনও প্রকার টীকাতে ব্যবহার করে সর্বদা সমতুল্য হিসাবে বিবেচিত হয়type(None)
। (typing
ডকুমেন্টেশনটিNone
বেশিরভাগ ক্ষেত্রে ব্যবহার করে তবে এখানে তা নয়, যা একটি তদারকি)।