Python类调用其他方法

时间:2019-02-01 07:15:17

标签: python class methods

我不明白为什么这段代码不起作用:

import numpy as np 

class Normalizer:
    def __init__(self,x):
        self.x = x 
    def mean(self):
        return np.sum(self.x)/np.size(self.x)
    def mean_zero(self):
        return self.x - self.x.mean()
    def new_calc(self):
        return self.x.mean_zero()

    a = np.random.randint(150,200,(5,8))

    heights = Normalizer(a)


    print(a)
    print(heights.mean()) 
    print(heights.mean_zero())
    print(heights.mean_zero().mean())
    print(heights.new_calc())

它正确执行了heghts.mean_zero(),但是在方法def new_calc(self)中却没有执行。如果有人可以向我解释这一点将是很棒的。谢谢!

5 个答案:

答案 0 :(得分:1)

  

我不明白为什么这段代码不起作用:

如果运行以下代码,它将引发错误:

AttributeError: 'numpy.ndarray' object has no attribute 'mean_zero'
  • 找到问题所在,唯一调用mean_zero的地方是new_calc方法。因此,第一步完成了。

  • 分析,如果您查看Normalize类,则它具有一个属性x,类型为numpy.ndarray。如果您仔细阅读错误消息,它会指出ndarray类型没有属性mean_zero。另一方面,您在类中定义了mean_zero方法,这是您应该调用的方法。

这两个步骤可以得出结论,问题出在new_calc方法中:

def new_calc(self):
    return self.mean_zero() #(wrong)return self.x.mean_zero()

答案 1 :(得分:0)

插入self.x.mean_zero()写入self.mean_zero()

import numpy as np 

class Normalizer:
   def __init__(self,x):
       self.x = x 
   def mean(self):
       return np.sum(self.x)/np.size(self.x)
   def mean_zero(self):
       return self.x - self.mean()
   def new_calc(self):
       return self.mean_zero()

a = np.random.randint(150,200,(5,8))

heights = Normalizer(a)


print(a)
print(heights.mean()) 
print(heights.mean_zero())
print(heights.mean_zero().mean())
print(heights.new_calc())

答案 2 :(得分:0)

我不确定x中的__init__是什么,但是很可能您实际上想在{{1 }}变量(同一对象):

mean_zero

答案 3 :(得分:0)

您正在使用'a'初始化Normalizer,这是np.random.randint的输出,该输出返回numpy.ndarray对象。

在new_calc方法中,您尝试调用ndarray对象的mean_zero方法,但是ndarray没有此类方法。 mean_zero 是Normalizer上的一种方法,但是self.x的类型不是Normalizer。

我不确定这段代码new_calc应该做什么。如果您可以更清楚地说明这一点,我也许可以提供更多帮助。

答案 4 :(得分:0)

罪魁祸首:

def new_calc(self):
        return self.x.mean_zero()

原因:

self.xNormalizer类的属性。因此,如果heightsNormalizer类的实例,则heights.xself.x

答案:

def new_calc(self):
        return self.mean_zero()

理由:

  

AttributeError:“ numpy.ndarray”对象没有属性“ mean_zero”

ndarray没有这种方法。 mean_zero是规范化方法