*Memo:
- My post explains type hint (1).
- My post explains type hint (2).
- My post explains type hint (4).
- My post explains type hint (5).
- My post explains type hint (6).
- My post explains type hint (7).
Setting multiple types to a type hint narrows(limits) the usage of object attributes as shown below:
<str | list[str]>:
*Memo:
- Both str and list have
index()with one required and two optional parameters soindex()with one, two or three arguments works. - Both
strandlisthavecount()butstr.count()has one required and two optional parameters whilelist.count()has one required parameter socount()with one argument works. - Only
strhasupper()soupper()doesn't work.
v: str | list[str] = 'hello world'
print(v.index('rl'))
print(v.index('rl', 6))
print(v.index('rl', 6, 11))
print(v.count('ll'))
# No error
print(v.count('l', 0))
print(v.count('l', 0, 5))
print(v.upper())
# Error
v = ['A', 'B', 'C', 'D', 'E']
# No error
<Cls1 | Cls2>:
*Memo:
- Both
Cls1andCls2haveadd()butstr.add()hasxandyrequired andzoptionalfloatparameters whilelist.add()hasaandyrequiredintparameters soadd()with two positional or one positional andykeywordintarguments works. - Only
Cls1hasPIandsub()soPIandsub()don't work.
class Cls1:
PI: float = 3.14
def add(self, x:float, y:float, z:float = 4) -> float:
return x+y+z
def sub(self, x:float, y:float) -> float:
return x-y
class Cls2:
def add(self, a:int, y:int) -> int:
return a+y
cls1: Cls1 | Cls2 = Cls1()
print(cls1.add(5, 2))
print(cls1.add(5, y=2))
# No error
print(cls1.add(x=5, y=2))
print(cls1.add(5, 2, 6))
print(cls1.add(5.3, 2.8))
print(cls1.PI)
print(cls1.sub(5, 2))
# Error
The typed variable with no value is possible as an annotated assignment statement(annasgstmt) even though it's not defined yet while the untyped variable with no value is impossible as an assignment statement(asgstmt) as shown below:
v: str
v = 'Hello'
v: str
print(v)
# NameError: name 'v' is not defined
v
# NameError: name 'v' is not defined
Multiple variables cannot be typed at once so they need to be typed first one by one as shown below:
v1: str
v2: str
v1 = v2 = 'Hello'
print(v1) # Hello
print(v2) # Hello
v1: str = v2: str = 'Hello'
# SyntaxError: invalid syntax
Assignment statement unpacking cannot be typed at once so variables need to be typed first one by one as shown below:
v: str, = 'Hello',
v1: str, v2: int = 'Hello', 23
# SyntaxError: invalid syntax
v: str
v, = 'Hello',
print(v) # Hello
v1: str
v2: int
v1, v2 = 'Hello', 23
print(v1) # Hello
print(v2) # 23
for statement unpacking cannot be typed at once so variables need to be typed first one by one as shown below:
for v: str, in [['A'], ['B'], ['C']]: pass
for v1: str, v2: int in [['A', 0], ['B', 1], ['C', 2]]: pass
# SyntaxError: invalid syntax
v: str
for v, in [['A'], ['B'], ['C']]:
print(v)
# A
# B
# C
v1: str
v2: int
for v1, v2 in [['A', 0], ['B', 1], ['C', 2]]:
print(v1, v2)
# A 0
# B 1
# C 2
Top comments (0)