为什么类字段在一个类方法中可调用而在另一个类中无法调用?

时间:2016-01-07 12:50:16

标签: python

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

[DesignTimeVisible(true)]

当我实例化一个对象时,我可以毫无问题地调用它的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方法时,我得到了

  

TypeError:' bytearray'对象不可调用

我也digest print(self.digest)没有错误。

有人能说明这种行为的原因吗?

2 个答案:

答案 0 :(得分:5)

不再有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

答案 1 :(得分:1)

digest实例属性(在__init__中设置)会隐藏digest方法。您必须重命名实例属性或方法。