我决定检查该方法的作用abc.get_cache_token()
,但我不明白为什么在输出令牌时,它总是打印相同的值。根据定义,我想知道什么是缓存版本以及为什么要比较?
令牌是一个不透明对象(支持相等测试),用于标识虚拟子类的抽象基类的当前缓存版本。
import abc
import unittest
from abc import ABC, abstractmethod, ABCMeta
class Test_Environment(unittest.TestCase):
def test(self):
class A(metaclass=abc.ABCMeta):
@abstractmethod
def func(self):
raise NotImplementedError
class B(A):
def func(self):
print("inheritance")
Otoken = abc.get_cache_token()
obj = B()
Ntoken = abc.get_cache_token()
self.assertEqual(Otoken, Ntoken, 'equal')
print(Otoken, Ntoken)
mc = Test_Environment()
mc.test()
27 27 输出
同时,equal
方法中的注释assertEqual
没有显示,也没有任何反应。
仅当您通过静态方法调用将祖先类与非继承类关联时,令牌才会更新
register
。由于在您的示例中,类B
显式继承自 class ,因此不会调用A
该方法。A.register
如果您想增加代币价值,请修改示例
通过以下操作顺序,
assertEqual
它会脱落: