gpt4 book ai didi

python - 在每个对象调用后更改属性

转载 作者:行者123 更新时间:2023-11-28 20:21:01 26 4
gpt4 key购买 nike

我试图弄清楚如何在每次调用对象后更改某些值。我认为 call() 函数在每次调用后执行。

这应该是一个简单的计数器类,在调用后减少值属性。

class counter():
def __init__(self,value):
self.value = value

def __call__(self):
self.value -= 1

count = counter(50)
print count.value
print count.value

>> 50
>> 50 <-- this should be 49

我做错了什么?

最佳答案

如果您不致力于类,您可以使用函数并滥用可变类型作为默认初始化程序:

def counter(init=None, container=[0]):
container[0] -= 1
if init is not None: container[0] = init
return container[0]


x = counter(100)
print(x) # 100
print( counter() ) # 99
print( counter() ) # 98
print( counter() ) # 97
# ...

使用单个参数调用counter 来设置/初始化计数器。由于初始化实际上是对该函数的第一次调用,因此它将返回该数字。

不带参数调用counter 以获取“下一个值”。

(与我的建议非常相似 here )

或者,对于更接近您问题中所用语法的语法,请使用 properties :

class Counter(object):
def __init__(self, init):
self.val = init

@property
def value(self):
val = self.val
self.val -= 1
return val

count = Counter(50)

print(count.value) # 50
print(count.value) # 49
print(count.value) # 48
print(count.value) # 47
#...

在这里,您正在创建一个名为 countCounter 对象,然后每次调用 count.value 时,它都会返回当前值,并且通过递减其内部 val 属性为将来的调用做好准备。

同样,当您第一次请求 value 属性时,它会返回您初始化时使用的数字。

如果出于某种原因,你想“窥视”下一次对 count.value 的调用,而不是递减它,你可以查看 count.val 代替。

关于python - 在每个对象调用后更改属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29244699/

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