gpt4 book ai didi

python - "self.data"在 python 中的用法

转载 作者:太空宇宙 更新时间:2023-11-03 13:02:19 25 4
gpt4 key购买 nike

你好,我有一个关于 Python 中属性用法的问题。我了解到在函数定义中我们可以为对象分配一些新属性,例如:self!但是,当尝试使用它时,我得到了一个错误,即“...实例没有属性‘数据’

class Lazy:
def __call__(self, num):
if num is None:
return self.data
# It changes the current object in-place,
# by reassigning the self attribute.
else:
self.data += num

这是我的小代码。我对此很陌生。我不知道出了什么问题。非常感谢。

最佳答案

如果 num 为 None,您只是在分配 self.data,因此您可能会在分配之前尝试访问它。为防止这种情况,您可以在构造函数中对其进行初始化:

class Lazy:
def __init__(self):
self.data = 0

def __call__(self, num):
if num is None:
return self.data
else:
self.data += num

以下是导致错误的事件序列:

  1. 您创建了您的类的一个新实例。此时,Python 对 self.data 一无所知:

    lazy = Lazy()
  2. 你称它为传递 None:

    lazy(None)
  3. 现在,Python 进入 __call__,因为 if 条件的计算结果为 True,它会尝试返回 self.data。等一下……它仍然不知道 self.data 是什么……所以它吐出一个错误。

为了防止这种情况发生,您总是必须在尝试对它们的值执行某些操作(例如,从函数返回它们)之前分配您的属性。它不必在构造函数中:就在 Python 第一次尝试访问该属性之前。对于任何变量都是如此,即以下是不可能的:

print(a) # How do you expect Python to know the value of a?
a = 5 # too late to assign it now...

关于python - "self.data"在 python 中的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15863784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com