首页 > 解决方案 > 将类实例作为函数的可选输入字段

问题描述

有没有比使用 if/else 语句将类实例添加为函数内的可选字段更简洁的方法?下面是使用 if/else 语句为类实例创建可选字段的示例:

  class hi:
    def __init__(self):
      self.ii = "foo"
      self.kk = "bar"



  def foo(myClass = None,**kwargs):
      if myClass.ii:
          print(myClass.ii)
      else:
          print("Nothing")

p=hi()
foo(p) #returns "foo"
foo() #returns "Nothing"

如果函数中有很多可选实例,这可能会变得难以阅读。是否有一种干净的方法可以将函数的 if/else 部分重写为更干净,类似于kwargs.get下面示例中的部分:

  def foo(**kwargs):
       print (kwargs.get("aa", "Nothing"))

  foo(aa = "pii") #output: "pii"
  foo()#output: "Nothing"

标签: pythonclass

解决方案


您可能正在寻找getattr

getattr(myClass, 'ii', 'Nothing')

这也将防止您的代码AttributeError在属性不存在时引发错误,否则原始代码会发生这种情况。


推荐阅读