当前位置: 首页 > 面试题库 >

传递self.var(实例属性)作为默认方法参数[重复]

帅颖逸
2023-03-14
问题内容

这个问题已经在这里有了答案

使用self。*作为方法的默认值[重复] (4个答案)

4年前关闭。

在分配num1 = self.var1函数时fiz,Python表示未解决的参考。这是为什么?

class Foo:

    def __init__(self):
        self.var1 = "xyz"

    def fiz(self, num1=self.var1):
        return

问题答案:

定义方法时,
将解析方法(和函数)的默认参数值。当这些值可变时,这会导致常见的Python陷阱:“最低惊讶”和可变默认参数

在您的情况下,self定义方法时不可用(并且如果作用域中有这样的名称,因为您实际上Foo尚未完成对类的定义,那么它将不是Foo实例!)您无法引用到
由定义任一内部名称;
引用Foo也会导致NameError:我可以使用class属性作为实例方法的默认值吗?

相反,常用方法是None用作占位符,然后在方法主体内分配默认值:

def fiz(self, num1=None):
    if num1 is None:
        num1 = self.val1
    ...


 类似资料:
  • 问题内容: 我想将类属性用作类方法的参数之一的默认值。但是,此构造引发了一个异常,而我不明白为什么: 为什么会失败,并且有办法做到这一点? 问题答案: 这是因为,根据文档: 执行功能定义时将评估默认参数值。 这意味着在定义函数时,表达式将被计算一次 当定义了时,的定义是不完整的,因为它仍在解析中,因此您还不能参考。解决该问题的一种方法是将一个特殊的唯一值传递给,例如:

  • 问题内容: 简而言之,我想要的是: 代替 主要是为了: 可读性 单元测试 问题答案: 我找到了解决方案。 我们的想法是注册自定义的,它可以处理一个自定义的注释- (或)。 如果未指定,则可以使用其中张贴的代码的注释。

  • 我有两种几乎相似的方法: 我想写一个通用函数,如下所示: 因此,我想让这样的东西发挥作用: 实际上,我找不到如何传递和作为参数。有什么建议吗?

  • 问题内容: 我试图将选择的A类“获取”方法传递给B类中的方法。我已经将Java PassMethod作为Parameter签出,但是我无法以合理的方式采用接口方法解决问题。我宁愿 不 使用Java 8(lambdas),并尽可能避免反射。我的感觉是,我以错误的方式看待自己的问题。这是我要完成的工作的特定简化示例: 我有一个包含一些字段和get-method的类: 接下来,我将主类实例化为Map的V

  • 我是静态编程语言的新手,我发现静态编程语言不同于Java的特性之一是方法默认参数。https://kotlinlang.org/docs/functions.html#default-arguments 我正在创建一个简单的Kotlin应用程序,它将null值传递给具有2个不可为null的默认参数的方法,这会导致编译错误-类型不匹配:推断的类型是String?但应为字符串)。 一种解决方法是将方法

  • 我想在方法中传递一个JFrame作为参数,可以吗? 这里是我想要的: