заведомо знаю какой он
                  
                  
                  
                  
                  
                  Типа есть функция 
                  
                  
                  
                  
                  
                  
                  
                  
                  def func() -> Foo | Bar
                  
                  
                  
                  
                  
                  
                  
                  
                  И в другом месте я пишу 
                  
                  
                  
                  
                  
                  
                  
                  
                  a = func()
                  
                  
                  
                  
                  
                  
                  
                  
                  Но точно знаю, что это Foo
                  
                  
                  
                  
                  
                  Как мне это указать?
                  
                  
                
Откуда знаешь?
Убрать юнион, взять typing.overload. или вообще делать не так
Есть typing.cast, но это прям совсем крайний случай
 Źmićer
                          Rubinštejn
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Źmićer
                          Rubinštejn
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Ну вот у меня идея (может быть дурная) - сделать __getitem__ и в зависимости от того что передаешь в value - он возвращает разные типы.
 Źmićer
                          Rubinštejn
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Źmićer
                          Rubinštejn
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  К сожалению arg в _getitem__ одного и того же типа
покажи больше кода
Если ты в конкретном месте знаешь по какой-то причине, что там Foo: a) assert value is Foo — проверить в рантайме b) value = typing.cast(Foo, value) — без проверки в рантайме c) подумать, как сделать так, чтобы юниона всё-таки не было — зависит от кода
 Źmićer
                          Rubinštejn
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Źmićer
                          Rubinštejn
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  class A: pass class B: pass mapping = { “a”: A, “b”: B } class Foo: def __getitem__(self, arg): return mapping[arg]
class Foo: @overload def __getitem__(self, arg: Literal["a"]) -> A: ... @overload def __getitem__(self, arg: Literal["b"]) -> B: ... def __getitem__(self, arg: str) -> A | B: return mapping[arg]
 Źmićer
                          Rubinštejn
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Źmićer
                          Rubinštejn
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Теперь надо понять как сделать это автоматически чтобы был single source of truth - mapping
Обсуждают сегодня