Python中的__init__的对象
我写了一些Python代码:
class key(object):
def __init__(self,name):
object.__init__(self,age)
this.name = name
this.age = age
def somefunction(self):
print "yay the name is %d" % self.name
baby = key('radan',20)
baby.somefunction()
当我用 baby = key('radan',20)
创建一个 key
的实例时,我遇到了一个类型错误(TypeError)。我不知道为什么会出现这个错误。是不是因为 object.__init__(self,age)
的原因呢?
如果是的话,请帮我解释一下为什么要使用 object.__init__(self,age)
,它的目的是什么,并帮我解决这个代码的问题。
3 个回答
0
当你执行 baby = key('radar', 20)
时,其实你传递了三个参数:实例、name
和 age
。但是你的初始化函数只定义了两个参数,所以就会出现 TypeError
的错误。
self
是在引用对象实例时自动传递的一个参数。
对于你的 __init__
函数,我建议这样写:
def __init__(self, name, age):
self.name = name
self.age = age
这样我们就可以把传入的参数作为属性赋值给当前的实例,通常称为 self
。
在这里调用 object.__init__
是没有意义的,直接把那行代码删掉就行。
除此之外,其他部分都运行得很好(不过要用 %s
替代 %d
)。
测试:
>>> baby = key('radan', 20)
>>> baby.somefunction()
yay the name is radan
1
一些提示:
class Key(object): # in Python, classes are usually named with a starting capital
def __init__(self, name, age): # name all your arguments beside self
self.name = name # use self.name, not this.name
self.age = age
def somefunction(self):
print "yay the name is %s" % self.name
baby = Key('radan',20)
baby.somefunction()
# output: yay the name is radan
其实,在Python中,你可以把self
这个实例参数随便命名,比如可以叫this
,但是这样会让其他人看你的代码时觉得难懂,所以最好还是用self
。
你不需要在这里使用object.__init__(self, name, age)
。如果你把那一行去掉,然后按照上面的修改来做,你的代码照样能正常工作。
0
你的代码里面有几个错误:
class key(object):
def __init__(self, name, age): # where's your age?
self.name = name # no need to call object.__init__
self.age = age # there is no such thing called "this", use self
def somefunction(self):
print "yay the name is %s" % self.name # use %s as the comment says
baby = key('radan', 20)
baby.somefunction()
输出结果:
>>> baby = key('radan', 20)
>>> baby.somefunction()
yay the name is radan