TypeError:“ ~~~~”类型的对象没有len()

时间:2020-07-20 21:18:07

标签: python function object

我有一个简单的问题,关于为什么类型为“ ~~~”的对象没有len()

X_train=np.array([[5,4],
                  [4,5],
                  [4,4],
                  [6,-6]])
class MyKNN:
    def __init__(self, k):
        self.k = k

    def Build_KDTree(data, depth = 0):
        n = len(data)
        return n

 knn = MyKNN(3)
 knn.Build_KDTree(X_train)

这段代码给我TypeError:类型为'MyKNN'的对象没有len(),这使我非常困惑。 如果我将功能构建为:

 def Build_KDTree(data):
     n = len(data)
     return n

 Build_KDTree(X_train)

有效!我可以知道这种现象背后的理论是什么吗?

非常感谢

2 个答案:

答案 0 :(得分:0)

您在Build_KDTree中缺少self参数。其背后的“理论”就是,Python使用方法中的第一个参数作为对对象的引用。变量“ self”只是最佳编程实践,但是在Python中,任何变量都可以用来替代self。要解决此问题,只需添加self参数:

X_train=np.array([[5,4],
                  [4,5],
                  [4,4],
                  [6,-6]])
class MyKNN:
    def __init__(self, k):
        self.k = k

    def Build_KDTree(self, data, depth = 0):
        n = len(data)
        return n

 knn = MyKNN(3)
 knn.Build_KDTree(X_train)

答案 1 :(得分:0)

已修复,您丢失了self参数。


import numpy as np

X_train=np.array([[5,4], [4,5], [4,4], [6,-6]])

class MyKNN:
    def __init__(self, k):
        self.k = k

    def Build_KDTree(self, data, depth = 0):
        n = len(data)
        return n

knn = MyKNN(3)
knn.Build_KDTree(X_train)