我写了一些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()
当我使用key
创建baby = key('radan',20)
的实例时,我得到了一个TypeError。我不知道为什么会收到此错误。是因为object.__init__(self,age)
?
如果是,请帮助我解释我们使用object.__init__(self,age)
的原因以及目的是什么,并帮助我解决此问题。
答案 0 :(得分: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
),但它会使代码更难以为其他人阅读,因此只需使用{{1} }。
您不必在此使用self
。如果您删除该行并实施上述更改,您的代码将正常工作。
答案 1 :(得分: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
答案 2 :(得分: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