首页 > 解决方案 > 在python中传递来自不同类的值

问题描述

我是python编程的新手。__init__我现在遇到一个问题,我想将一个类的一些结果作为属性之一调用到另一个类 。这是下面显示的代码:(reduced_data 是向量中的数值数据)

class A:
    def __init__(self, k=3, tol=0.0001, max_iter=300):
        self.k = k
        self.tol = tol
        self.max_iter = max_iter

    def fit(self, data):

        self.centroids = {}

        for i in range(self.k):
            self.centroids[i] = data[i+50]

        for i in range(self.max_iter):
            self.classifications = {}

            for i in range(self.k):
                self.classifications[i] = []

            for featureset in data:
                distances = [np.linalg.norm(featureset - self.centroids[centroid]) for centroid in self.centroids]
                classification = distances.index(min(distances))
                self.classifications[classification].append(featureset)
            prev_centroids = dict(self.centroids)

            for classification in self.classifications:
                self.centroids[classification] = np.average(self.classifications[classification], axis=0)

            optimized = True

            for c in self.centroids:
                original_centroid = prev_centroids[c]
                current_centroid = self.centroids[c]
                if np.sum((current_centroid - original_centroid) / original_centroid * 100.0) > self.tol:
                    #print(np.sum((current_centroid - original_centroid) / original_centroid * 100.0))
                    optimized = False

            if optimized:
                break
            
    def cluster_labels(self,data):
        cluster_labels = []
        for featureset in data:
            distances=[np.linalg.norm(featureset - self.centroids[centroid]) for centroid in self.centroids]
            cluster_labels.append(distances.index(min(distances)))
        return cluster_labels

class B:
        x = np.linalg.norm(reduced_data-[1,1])
        k = (x-5)^2
        a = A()
        a.fit(reduced_data)
        y_pred = a.predict(reduced_data)
        labels = a.cluster_labels(reduced_data)

基本上,我想将 B 类中的值 k 作为 A 类的属性传递,我该def __init__(self, k=k in class B, tol=0.0001, max_iter=300):如何实现呢?

标签: python

解决方案


__init__您可以在创建该对象的新实例时从方法中传递参数。

a = A(k)

请注意,在 classB中,代码不在方法内。您可能希望将该代码放在类定义之外。在 Python 中,代码不必在类中。


推荐阅读