首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么类字段在一个类方法中是可调用的,而在另一个类方法中是不可调用的?

为什么类字段在一个类方法中是可调用的,而在另一个类方法中是不可调用的?
EN

Stack Overflow用户
提问于 2016-01-07 12:50:16
回答 2查看 101关注 0票数 1

我有一门课看起来是这样的:

代码语言:javascript
复制
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:“字节数组”对象不可调用

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

有人能告诉我这种行为的原因吗?

EN

回答 2

Stack Overflow用户

发布于 2016-01-07 12:55:15

再也没有digest方法了。您已经用digest属性重写了它。只有一个名称空间。

一个简短的例子:

代码语言:javascript
复制
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
票数 5
EN

Stack Overflow用户

发布于 2016-01-07 13:07:40

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34655598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档