Str对象不可调用,带有类

时间:2015-02-25 18:46:31

标签: python class python-2.7 subclass

我正在上课,当我打电话给班级" Animal"它给了我错误:" Str对象不可调用"

这是我的代码:

class Animal(object):
    def __init__(self, name):
        self.name = name
    def name(self):
        print '%s' %(self.name)
rock=Animal("rock")
rock.name()

3 个答案:

答案 0 :(得分:7)

设置self.name = name时,会隐藏方法。现在rock.name引用字符串"rock",而不是方法:Animal.name

一种可能的解决办法:

class Animal(object):
    def __init__(self, name):
        self._name = name

    def name(self):
        print '%s' %(self._name)

rock=Animal("rock")
rock.name()

但是,当然,如果你做了这个改变,你会得到一个令人惊讶的结果:

print rock.name

答案 1 :(得分:0)

Object.name引用该名称。因此,您可以键入:rock.name来查看名称,也可以创建一个提取名称的方法:rock._get_name()

    class Animal(object):
        def __init__(self, name):
            self.name = name
        def _get_name(self):
            print '%s' %(self.name)
    rock=Animal("rock")
    rock._get_name()

答案 2 :(得分:0)

class Animal(object):
    def __init__(self, name):
        self.name = name
    def my_name(self):
        print '%s' %(self.name)
rock=Animal("rock")
print rock.name
rock.my_name()

给出

>>>rock
>>>rock

这意味着:

当您尝试拨打.name()时,它正在调用Animal class属性(name),这会提供str。因此str无法调用。所以不应该像rock()那样调用它。这是你的错误。但是类方法,这里my_name是可调用的,它打印出attribute name