Str 对象不可调用,类

Str object not callable, with Classes

我正在学习 classes,当我调用 class "Animal" 时出现错误:"Str object not callable"

这是我的代码:

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

当您设置 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

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()
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 不是 callable.So它不应该被称为rock()。那就是你的 error.But class 方法,这里 my_name 是可调用的,它打印它的 attribute name