Python TypeError:“ str”对象不可用于类

发布于 2021-01-29 16:25:10

请帮助我理解这一点。我创建了一个非常简单的程序来尝试理解类。

class One(object):
    def __init__(self, class2):
        self.name = 'Amy'
        self.age = 21
        self.class2 = class2

    def greeting(self):
        self.name = raw_input("What is your name?: ")
        print 'hi %s' % self.name

    def birthday(self):
        self.age = int(raw_input("What is your age?: "))
        print self.age

    def buy(self):
        print 'You buy ', self.class2.name

class Two(object):
    def __init__(self): 
        self.name = 'Polly'
        self.gender = 'female'

    def name(self):
        self.gender = raw_input("Is she male or female? ")
        if self.gender == 'male'.lower():
            self.gender = 'male'
        else:
            self.gender = 'female'

        self.name = raw_input("What do you want to name her? ")

        print "Her gender is %s and her name is %s" % (self.gender, self.name)

Polly = Two()
Amy = One(Polly) 
# I want it to print


Amy.greeting()
Amy.buy() 
Amy.birthday()

问题代码

Polly.name() # TypeError: 'str' object is not callable
Two.name(Polly)# Works. Why?

为什么在类实例Polly上调用方法无效?我很迷路。我已经看过http://mail.python.org/pipermail/tutor/2003-May/022128.html和其他与此类似的Stackoverflow问题,但我不明白。非常感谢。

关注者
0
被浏览
286
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    该类Two具有一个实例方法name()。因此,请Two.name参考此方法,以下代码可以正常工作:

    Polly = Two()
    Two.name(Polly)
    

    但是,在中__init__(),您可以name通过将其设置为字符串来覆盖它,因此,每次创建的新实例时Two,该name属性都将引用字符串而不是函数。这就是以下失败的原因:

    Polly = Two()      # Polly.name is now the string 'Polly'
    Polly.name()       # this is equivalent to 'Polly'()
    

    只要确保您为方法和实例变量使用单独的变量名即可。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看