使用`object`来实例化自定义类

时间:2012-12-31 06:37:58

标签: python

这是我的哈哈班

class  haha(object):
  def  theprint(self):
    print "i am here"

>>> haha().theprint()
i am here
>>> haha(object).theprint()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object.__new__() takes no parameters

为什么haha(object).theprint()输出错误?

3 个答案:

答案 0 :(得分:0)

class haha(object):表示haha继承自object。继承object基本上意味着它是一个新式的类。

调用haha()会创建haha的新实例,从而调用构造函数,这将是一个名为__init__的方法。但是,您没有,因此使用了不接受任何参数的默认构造函数。

答案 1 :(得分:0)

haha略有变化的示例可能有助于您了解正在发生的事情。我已经实现了__init__,因此您可以看到它何时被调用。

>>> class haha(object):
...   def __init__(self, arg=None):
...     print '__init__ called on a new haha with argument %r' % (arg,)
...   def theprint(self):
...     print "i am here"
... 
>>> haha().theprint()
__init__ called on a new haha with argument None
i am here
>>> haha(object).theprint()
__init__ called on a new haha with argument <type 'object'>
i am here

如您所见,haha(object)最终将object作为参数传递给__init__。由于您尚未实施__init__,因此您收到错误,因为默认__init__不接受参数。如您所见,这样做没有多大意义。

答案 2 :(得分:0)

在实例化时,你很难将继承与初始化类混淆。

在这种情况下,对于您的类声明,您应该

class  haha(object):
    def  theprint(self):
        print "i am here"

>>> haha().theprint()
i am here

因为哈哈(对象)意味着哈哈继承自对象。在python中,没有必要编写它,因为默认情况下所有类都从对象继承。

如果你有一个 init 方法接收参数,你需要在实例化时传递这些参数,例如

class  haha():
    def __init__(self, name):
        self.name=name
    def theprint(self):
        print 'hi %s i am here' % self.name

>>> haha('iferminm').theprint()
hi iferminm i am here