AttributeError:FUN实例没有属性'__trunc__

2 投票
1 回答
13977 浏览
提问于 2025-04-17 22:11

这是我的类 FUN,但结果显示 AttributeError: FUN instance has no attribute '__trunc__'。请告诉我代码中哪里出错了,以及该如何修改。

import math
import random
import string
import numpy as np
import pickle
from itertools import chain

random.seed(0)

class FUN:
 def __init__(self):
    print "fun"
 # set a random numbers between a & b
 def rand(a, b):
    self.rand = (b-a)*random.random() + a
    return self.rand

 # sigmoid function, tanh ~ 1/(1+e^-x)
 def sigmoid(x):
     self.sig = math.tanh(x)
     return self.sig

 def sigmoid1(x):
    self.sig1 = 1/(1+math.exp(-x))
    return self.sig1

 # derivative of sigmoid function, in terms of the output (y)
 def dsigmoid(y):
    self.dsig = 1.0 - y**2
    return self.dsig
 # getting 2d array
 #def matrix(I, J, fill=0.0):
    #return [[val for col in range(I)] for row in range(J)]
 #obtain a matrix
 def matrix(I, J, fill=0.0):
    m = []
    for i in range(I):
        m.append([fill]*J)
    return m
f = FUN()
print f.matrix(2,3)

上面的代码出现了以下类型的错误:

fun
Traceback (most recent call last):
File "functions.py", line 42, in <module>
 print f.matrix(2,3)
File "functions.py", line 38, in matrix
 for i in range(I):
AttributeError: FUN instance has no attribute '__trunc__'

请帮我解决这个错误。

1 个回答

9

方法的第一个参数应该是 self,但是你把它命名成了 I,并把这个 I 传给了 range()。这样做会让 Python 尝试把你自定义的 FUN 类的实例变成一个整数,但这失败了:

>>> class FUN: pass
... 
>>> range(FUN())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: FUN instance has no attribute '__trunc__'

你需要加上一个 self 参数:

def matrix(self, I, J, fill=0.0):

你还需要对其他方法做同样的事情;除了 __init__ 方法,其他方法都缺少 self

Python 首先会尝试 object.__int__,然后再尝试 object.__trunc__,这个方法的文档 surprisingly 很少。只有 math.truncate() 的文档和 数字类型层次 PEP 3141 提案 提到了这个方法。

撰写回答