আমি কিছু ইন্টারফেস লিখতে অ্যাবস্ট্রাক্ট বেস ক্লাসগুলির সাথে পাইথনের ধরণের টীকাগুলি চেষ্টা করে দেখছি। এর সম্ভাব্য প্রকারগুলি *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ডিফল্ট কারণে কঠোরভাবে প্রয়োজন হয় না ?