python中带有__init__的对象

时间:2014-04-12 15:07:34

标签: python

我写了一些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)的原因以及目的是什么,并帮助我解决此问题。

3 个答案:

答案 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)时,您实际上正在传递三个参数:实例,nameage。但是,您的初始化程序被定义为只使用两个参数,因此您得到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