如何在python中实例化一个类

所以,我试图学习Python。 这似乎很容易,但显然,我不明白如何使用类。 当我尝试使用这个类时,下面的代码给了我一个错误。

class mystuff: def average(a,b,c): #get the average of three numbers result=a+b+c result=result/3 return result #now use the function average from the mystuff class print mystuff.average(9,18,27) File "class.py", line 7, in <module> print mystuff.average(9,18,27) TypeError: unbound method average() must be called with mystuff instance as first argument (got int instance instead) 

怎么了?

你可以通过声明一个variables来实例化这个类,并将它作为一个函数调用:

 x = mystuff() print x.average(9,18,27) 

但是,这不适用于你给我们的代码。 当你在一个给定的对象(x)上调用一个类方法时,当它调用该函数时,它总是将一个指向该对象的指针作为第一个参数。 所以如果你现在运行你的代码,你会看到这个错误消息:

 TypeError: average() takes exactly 3 arguments (4 given) 

为了解决这个问题,你需要修改平均方法的定义来取四个参数。 第一个参数是一个对象引用,其余3个参数是3个数字。

在你的例子中,在我看来,你想使用一个静态方法。

 class mystuff: @staticmethod def average(a,b,c): #get the average of three numbers result=a+b+c result=result/3 return result print mystuff.average(9,18,27) 

请注意,在python中大量使用静态方法通常是一些不好的气味的症状 – 如果你真的需要函数,那么直接在模块级别声明它们。

为了最小化你的例子,你可以修改代码来:

 class myclass(object): def __init__(self): # this method creates the class object. pass def average(self,a,b,c): #get the average of three numbers result=a+b+c result=result/3 return result mystuff=myclass() # by default the __init__ method is then called. print mystuff.average(a,b,c) 

或者更全面地扩展它,允许您添加其他方法。

 #!/usr/bin/env python import sys class myclass(object): def __init__(self,a,b,c): self.a=a self.b=b self.c=c def average(self): #get the average of three numbers result=self.a+self.b+self.c result=result/3 return result a=9 b=18 c=27 mystuff=myclass(a, b, c) print mystuff.average() 

类中的每个函数和每个类variables都必须像指向的那样采用自我参数。

 class mystuff: def average(a,b,c): #get the average of three numbers result=a+b+c result=result/3 return result def sum(self,a,b): return a+b print mystuff.average(9,18,27) # should raise error print mystuff.sum(18,27) # should be ok 

如果涉及类variables:

  class mystuff: def setVariables(self,a,b): self.x = a self.y = b return a+b def mult(self): return x * y # This line will raise an error def sum(self): return self.x + self.y print mystuff.setVariables(9,18) # Setting mystuff.x and mystuff.y print mystuff.mult() # should raise error print mystuff.sum() # should be ok 

你需要花一点时间在面向对象编程的基础上。

这听起来很刺耳,但很重要。

  • 你的类定义是不正确的 – 虽然语法恰好是可以接受的。 定义是完全错误的。

  • 你使用这个类来创build一个对象完全是缺失的。

  • 您使用class级进行计算是不合适的。 这种事情是可以做到的,但是它需要@staticmehod的先进理念。

由于您的示例代码在很多方面都是错误的,所以您无法整理“修复此问题”的答案。 有太多的事情要解决。

您需要查看更好的类定义示例。 目前尚不清楚您使用哪些源材料进行学习,但您阅读的任何书籍是错误还是不完整。

请放弃您使用的任何书籍或来源,并find更好的书。 认真。 他们误导了一个类定义的外观和使用方式。

您可能想要查看http://homepage.mac.com/s_lott/books/nonprog/htmlchunks/pt11.html以更好地介绍类,对象和Python。;

在一个类的python成员函数中需要显式的self参数。 与C ++中的隐式指针相同。 欲了解更多详情,请查看此页面。

尝试这个:

 class mystuff: def average(_,a,b,c): #get the average of three numbers result=a+b+c result=result/3 return result #now use the function average from the mystuff class print mystuff.average(9,18,27) 

或这个:

 class mystuff: def average(self,a,b,c): #get the average of three numbers result=a+b+c result=result/3 return result #now use the function average from the mystuff class print mystuff.average(9,18,27) 

你从来没有创build一个实例。

您已将平均值定义为实例方法,因此,为了使用平均值,您需要先创build一个实例。