源代码:
@staticmethod
def corr(fmap1, fmap2):
if not hasattr(self, "call_count"):
self.call_count = 0
self.call_count += 1
print(f"corr_{self.call_count}")
报错
File "/home/nvidia/audio_lip/lip/SyncTalk/data_utils/UNFaceFlow/core/corr.py", line 53, in corr
if not hasattr(self, "call_count"):
NameError: name 'self' is not defined
这个错误是因为在静态方法中使用了 self
。在 Python 中,静态方法是不需要实例就可以调用的方法,因此它们没有 self
参数。self
是指向类实例的引用,只有在实例方法中才存在。
如果你想在多次调用 corr
方法时保持 call_count
的状态,你可能需要将 corr
方法改为一个实例方法,或者将 call_count
变为类的一个属性。
方法一:将 corr
方法改为实例方法的修改:
class CorrBlock:
def __init__(self):
self.call_count = 0
def corr(self, fmap1, fmap2):
self.call_count += 1
print(f"corr_{self.call_count}")
# ...其余代码...
方法二:将 call_count
改为类属性的修改:
class CorrBlock:
call_count = 0
@staticmethod
def corr(fmap1, fmap2):
CorrBlock.call_count += 1
print(f"corr_{CorrBlock.call_count}")
# ...其余代码...
在这两个修改中,我都移除了 if not hasattr(self, "call_count")
这行代码,因为在这两个修改中 call_count
总是存在的。