我有一个简单的问题,关于为什么类型为“ ~~~”的对象没有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)
有效!我可以知道这种现象背后的理论是什么吗?
非常感谢
答案 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)