这是我的哈哈班
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()
输出错误?
答案 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