我正在上课,当我打电话给班级" Animal"它给了我错误:" Str对象不可调用"
这是我的代码:
class Animal(object):
def __init__(self, name):
self.name = name
def name(self):
print '%s' %(self.name)
rock=Animal("rock")
rock.name()
答案 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