python - python中成员函数的默认值

标签 python

class foo():
    def __init__(self,a):
        self.A=a

    def foo2(self,aa=self.A):
        return "la"
    @classmethod
    def test(cls):
        d=foo()
        d.foo2()

成员函数 foo2 找不到 self.A 也找不到 A。是否因为 A 没有在类内部全局设置?

最佳答案

关键字参数(例如 aa)不能采用 self 的默认值。关键字参数在方法定义时计算,而不是在调用时计算。通常,可以通过将 aa 的默认值设置为 None 来实现您所尝试的目的:

class foo():
    def __init__(self, a):
        self.A = a
    def foo2(self, aa=None):
        if aa is None:
            aa = self.A
        return 'la'

另请注意,由于关键字参数默认值是在定义时而不是执行时计算的,因此 foo2所有调用都共享其默认参数,即使是从 的不同实例调用也是如此foo.当新的 Python 程序员使用以下方法时,这常常会让他们感到困惑:

def footoo(a=list()):
    a.append(1)
    return a

所有对 footoo 的调用都会得到相同列表对象;每次通话都不会产生新的。因此重复调用 footoo 将导致以下结果:

>>> footoo()
[1]
>>> footoo()
[1, 1]
>>> footoo()
[1, 1, 1]

关于python - python中成员函数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904318/

相关文章:

python - Django 查找错误 : App 'accounts' doesn't have a 'User' model

Python 2.7 - 递归删除所有 __init__.py 和 __init__.pyc 文件

Python类型检查系统

python - Traceback.py 尝试比较 int 和 'limit',这会解析为 ImportError

python - 裁剪手写数字的图像

python - 如何在字符串中获取给定名称的变量的值?

python - Heroku:更改 requirements.txt 后出现 "directory exists"错误

python - 我如何在 python 中以相反的方式实现内置对象和创建的类之间的操作?

python - Fortran 版本的 python 循环给出了错误的答案

python - 导入和使用 keras/tensorflow 时出现 ModuleNotFoundError