Python中的__init__的对象

-3 投票
3 回答
646 浏览
提问于 2025-04-18 02:30

我写了一些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) 时,其实你传递了三个参数:实例、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
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

撰写回答