Here is the problem:
我有一本字典,使用两种不同类型的键(city_key
和village_key
)记录两种不同类型的值(比如city
和village
).我想用泛型来注释这个字典,这样当字典收到city_key
类型的键时,mypy/Pyright应该将返回值注释为city
.同样,如果try 将city
值赋给village_key
,mypy/pyright应该会抛出一个错误.
另一种 Select 是维护两个不同的字典,一个用于城市,一个用于村庄,但我很好奇我是否可以只使用一个字典.
What I've tried so far
我研究了这个问题,但没有找到明确的例子/答案.有一个问题和我的here个一样,但没有得到回答.
Some pseudo code to show what I am aiming for in practice
# two types of aliased keys
# ... edited to use NewType as per juanpa.arrivillaga comment
CityKey = NewType("CityKey", str)
VillageKey = NewType("VillageKey", str)
# two types of values, city and village
class City:...
class Village:...
# key generator that returns city or village key based on type of input
def generate_key(settlement: City | Village) -> CityKey | VillageKey: ...
# declare some keys & values
london = City("London")
london_key = generate_key(london)
mousehole = Village("Mousehole")
mousehole_key = generate_key(village)
# instantiate the dictionary
data: [????] = {}
# assign city to city key, and village to village key
data[london_key] = london
data[mousehole_key] = mousehole
# trying to assign village to city key should raise a type check error
data[london_key] = mousehole
# type of value accessed by village key should be village
reveal_type(data[mousehole_key]) # Type[Village]
非常感谢.
附言