【问题标题】:Intentionally returning None instead of object故意返回 None 而不是对象
【发布时间】:2022-12-22 08:57:50
【问题描述】:

我暂时停止使用 python(使用 Go 作弊),但现在我有一段代码要写,但我遇到了一些奇怪的事情。

假设我有两个简单的类:

@dataclass
class Item():
  Name: str
  Valie: float

class Registry():
  items = []
  
  def __init__(self):
    # load some items from external source, etc

  """ find an element in an array or return None """
  def find(self, name: str) -> Item:
    for i in self.Items:
      if i.Name = name: # items are unique, 
         return i
    return None # ignore type 

没有这个 #ignore type 得到警告 Expression of type "None" cannot be assigned to return type "Item"。好的,我明白为什么。但这是正确的方法还是有更好的更“pythonic”的方法来解决这个问题?即,如果它不在列表中,则不返回任何内容。

在“另一边”是这样的:

item = registry.find(name)
if item != None:
  doSomething()

附言我只想补充一点,我一生中的大部分时间都是用 Python 2.x 编写的,直到最近我才切换到 3.x(目前是 10)

【问题讨论】:

    标签: python object search


    【解决方案1】:

    将类型提示更改为 Optional[Item],它允许 ItemNone

    from typing import Optional
    
    def find(self, name: str) -> Optional[Item]:
    

    【讨论】:

      猜你喜欢
      • 2019-10-13
      • 2011-10-19
      • 2021-07-05
      • 2019-06-12
      • 2016-08-08
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多