Skip to main content
 首页 » 编程设计

python之为什么类字段在一个类方法中可调用而在另一个类方法中不可调用

2025年05月04日14yjmyzz

我有一个看起来像这样的类:

class Sha3_224(): 
  def __init__(self): 
    self.keccak = keccak.Keccak_f(b = 1600) 
    self.sponge = sponge.Sponge(f = self.keccak, pad = sha3_hash_byte_padding, r = 1600 - 2*224, d = 224) 
    self.digest = bytearray(0) 
 
  def process(self, fd): 
    fd.seek(0, 2) 
    message = msg.Message(l = fd.tell(), fd = fd) 
    fd.seek(0, 0) 
 
    del(self.digest[0:len(self.digest)]) 
    self.sponge.process(msg = message, out = self.digest) 
 
    print(self.digest) 
    print(len(self.digest)) 
 
  def digest(): 
    print(self.digest) 

当我实例化一个对象时,我可以毫无问题地调用它的 process 方法,但是当我尝试调用它的 digest 方法时,我得到了

TypeError: 'bytearray' object is not callable

我也可以在 __init__ 中 print(self.digest) 而不会出错。

谁能告诉我这种行为的原因?

请您参考如下方法:

不再有digest 方法。您已使用 digest 属性覆盖它。只有一个命名空间。

一个简短的例子:

class test(): 
    def __init__(self): 
        self.attr = 1 
    def attr(self): 
        pass 
 
t = test() 
t.attr        # 1 
t.attr()      # TypeError: 'int' object is not callable 
test.attr     # <unbound method test.attr> 
test.attr(t)  # works