【问题标题】:Optional arguments in class methods类方法中的可选参数
【发布时间】:2020-11-03 17:54:27
【问题描述】:

我有一个类函数,如果传递了可选参数(yaml 文件),则读取值并将其作为可选参数传递给 def books() 函数。但是执行下面的代码,我得到错误,因为没有定义'name'self'。如何将 yaml 项目作为可选参数读入 books 函数?

class Price:
    def __init__(self, *args):
        if args:
            with open(args, 'r') as f:
                stream = yaml.load(f, Loader=yaml.FullLoader)
            bookname= stream['book']['name']
            self.param = bookname
        else:
            self.param = None
        return self.param 

    def books(self, file, name=self.param):
         print(file,name)

【问题讨论】:

标签: python-3.x optional-parameters


【解决方案1】:

这个错误似乎是因为.books() 方法,而不是可选参数。您不能在方法签名中引用self.param。相反,您需要在方法中访问此属性。例如,根据您的要求,您可以这样重写它:

def books(self, file, name=None):
    name_to_print = name or self.param # take the name if provided or the self.param
    print(file, name_to_print)

最后,您会遇到的另一个问题是类构造函数 (__init__()) 不应该返回 self.param,而是 None(即它不应该返回任何内容)。在上面设置self.param的那一刻,它就成为类实例的一个属性,你不需要返回它。所以,我会删除行return self.param

【讨论】:

  • 谢谢你,它有效。假设错误与它有关,我将 return 语句保留在 init 方法中。但是现在明白了,谢谢
  • @sinG20 很高兴它有帮助
猜你喜欢
  • 1970-01-01
  • 2021-08-03
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 2015-05-17
  • 2012-06-19
相关资源
最近更新 更多