![](/img/trans.png)
[英]How to define a setup method only called once during testing with nosetest?
[英]How to define a callable that can only be called once?
為了演示我想要做什么,這里有一段代碼:
class CallOnce(object):
called=False
def web_service(cls,macid):
if cls.called:
print ("already called")
return
else:
# do stuff
print ("called once")
cls.called = True
return macid
為了測試我們的 class,我進行如下操作:
for i in range(2):
macid = "123"
call_once_object = CallOnce()
call = call_once_object.web_service(macid)
print(call)
預期的結果應該是這樣的:
called once
123
already called
除了我得到這個結果:
called once
123
called once
123
這個想法是在調用變量中只存儲一次值123
而不使用全局變量。
cls.called
是實例的屬性,而不是 class。 每次創建新的 object 時,它都會獲得自己的屬性,默認為False
。
如果你想在所有實例之間共享它,你應該使用CallOnce.called
,而不是cls.called
。
順便說一句,實例方法的第一個參數的常規名稱是self
。 cls
用於 class 方法。
因此,您正在嘗試保存一些 state。 您可以做的是改用 object。
class Test():
def __init__(self):
self.called = False
def call_me_maybe(self):
if (not self.called):
print('Hey, you called?')
self.called = True
else:
print("Stop calling me it's getting weird")
test = Test()
test.call_me_maybe() #-> Hey, you called?
test.call_me_maybe() #-> Stop calling me it's getting weird
為此,您不需要 class。 函數可以有自己的屬性。
def web_service(macid):
if hasattr(web_service, 'called'):
print ("already called")
return
else:
# do stuff
print ("called once")
web_service.called = True
return macid
web_service(5)
web_service(6)
Output:
called once
already called
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.