【问题标题】:Python - Putting an object property as default value for one of his functions [duplicate]Python - 将对象属性作为他的一个函数的默认值[重复]
【发布时间】:2019-06-05 13:30:28
【问题描述】:

我想知道在 python 中实现这一目标的最干净的方法是什么:

class A():
    def __init__(self, def_val):
        self.def_val=def_val
    def ciao(self, parameter=self.def_val):
        print(parameter)

当然上面给了我:“NameError: name 'self' is not defined”

【问题讨论】:

    标签: python


    【解决方案1】:

    我认为解决方案是这样的:

    class A():
    
        def __init__(self,def_val):
            self.def_val=def_val
    
        def ciao(self, parameter=None):
            if parameter is None: parameter = self.def_val
            print(parameter)
    

    它有效,并且可能是最 Pythonic 的方式

    In  [1]: a=A("Hi")
    
    In  [2]: a.ciao("ehi")
    Out [2]: 'ehi'
    
    In  [3]: a.ciao()
    Out [3]: 'Hi'
    

    【讨论】:

    • 改用is None
    • 您将实例(通常命名为self)分配给self.def_val,而没有在__init__ 中定义self。你在那里错过了一个论点吗?我知道您忘记将其包含在您的问题中,但您的代码至少应该经过测试以产生正确的输出。例如,Out [3] 中返回的 Hi 实际上需要是 'Hi'
    • 接下来,在测试None 时,使用is None,而不是==
    • @MartijnPieters 非常感谢!关于丢失的“自我”,在我的代码中我看到并纠正了这一点,但是在这里,我忘记了,抱歉。也感谢有关返回字符串的提示
    • @MartijnPieters 我对你的重复有点不同意,因为这个问题有点没用(当你通常在 init 函数中设置属性时,为什么你会在 init 函数中使用属性)而不是这样清晰易读(而给出的答案对我有帮助)
    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 2012-11-12
    • 2021-09-10
    • 2015-10-22
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多