আমি কিছু ইন্টারফেস লিখতে অ্যাবস্ট্রাক্ট বেস ক্লাসগুলির সাথে পাইথনের ধরণের টীকাগুলি চেষ্টা করে দেখছি। এর সম্ভাব্য প্রকারগুলি *args
এবং এর জন্য কোনও উপায় আছে কি **kwargs
?
উদাহরণস্বরূপ, কিভাবে প্রকাশ করবে একটি ফাংশন বুদ্ধিমানের আর্গুমেন্ট পারেন একটি হয় int
বা দুই int
গুলি? type(args)
দেয় Tuple
তাই আমার অনুমানটি প্রকারটি বর্ণনা করা ছিল Union[Tuple[int, int], Tuple[int]]
তবে এটি কার্যকর হয় না।
from typing import Union, Tuple
def foo(*args: Union[Tuple[int, int], Tuple[int]]):
try:
i, j = args
return i + j
except ValueError:
assert len(args) == 1
i = args[0]
return i
# ok
print(foo((1,)))
print(foo((1, 2)))
# mypy does not like this
print(foo(1))
print(foo(1, 2))
মাইপি থেকে ত্রুটি বার্তা:
t.py: note: In function "foo":
t.py:6: error: Unsupported operand types for + ("tuple" and "Union[Tuple[int, int], Tuple[int]]")
t.py: note: At top level:
t.py:12: error: Argument 1 to "foo" has incompatible type "int"; expected "Union[Tuple[int, int], Tuple[int]]"
t.py:14: error: Argument 1 to "foo" has incompatible type "int"; expected "Union[Tuple[int, int], Tuple[int]]"
t.py:15: error: Argument 1 to "foo" has incompatible type "int"; expected "Union[Tuple[int, int], Tuple[int]]"
t.py:15: error: Argument 2 to "foo" has incompatible type "int"; expected "Union[Tuple[int, int], Tuple[int]]"
এটি বুঝায় যে মাইপি ফাংশন কলটির জন্য এটি পছন্দ করে না কারণ এটি tuple
কলটি নিজেই একটি হবে বলে আশা করে। আনপ্যাক করার পরে সংযোজন একটি টাইপিং ত্রুটি দেয় যা আমি বুঝতে পারি না।
কেউ কীভাবে *args
এবং এর জন্য বোধগম্য প্রকারগুলি বর্ণনা করে **kwargs
?
Optional
? পাইথন সম্পর্কে কিছু পরিবর্তন হয়েছে বা আপনি নিজের মতামত পরিবর্তন করেছেন? এটি এখনওNone
ডিফল্ট কারণে কঠোরভাবে প্রয়োজন হয় না ?