我遇到一个简单程序的python问题。该程序应该允许用户创建一个Cow()实例并在参数中给牛一个名字。
class Cow():
def __init__(self, name):
self.name = name
if self.name == None:
raise NoNameCowError("Your cow must have a name")
def speak(self):
print self.name, "says moo"
现在我做的时候
cow.Cow("Toby")
我收到错误
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
cow.Cow("Toby")
File "C:\Users\Samga_000\Documents\MyPrograms\cow.py", line 8, in __init__
self.name = name
AttributeError: Cow instance has no attribute 'name'
帮助?我原本以为我做了一些错误的例外,但似乎并没有。提前谢谢。
答案 0 :(得分:1)
我认为您修改了源代码并且没有重新加载模块:
越野车版本:
class Cow():
def __init__(self, name):
if self.name == None:
raise NoNameCowError("Your cow must have a name")
def speak(self):
print self.name, "says moo"
>>> import so
按预期引发错误:
>>> so.Cow('abc1')
Traceback (most recent call last):
File "<ipython-input-4-80383f90b571>", line 1, in <module>
so.Cow('abc1')
File "so.py", line 3, in __init__
if self.name == None:
AttributeError: Cow instance has no attribute 'name'
现在让我们修改源代码并添加这一行self.name = name
:
>>> import so
>>> so.Cow('abc1')
Traceback (most recent call last):
File "<ipython-input-6-80383f90b571>", line 1, in <module>
so.Cow('abc1')
File "so.py", line 3, in __init__
self.name = name
AttributeError: Cow instance has no attribute 'name'
诶!还是一样的错误?那是因为python仍在使用旧的.pyc
文件或缓存的模块对象。只需重新加载模块,更新的代码就可以正常工作:
>>> reload(so)
<module 'so' from 'so.py'>
>>> so.Cow('dsfds')
<so.Cow instance at 0x8b78e8c>
来自docs:
注意出于效率原因,每个模块仅导入一次 口译员会议。因此,如果您更改模块,则必须 重新启动解释器 - 或者,如果它只是您要测试的一个模块 以交互方式,使用
reload()
,例如reload(modulename)
。
更好的代码版本:
class Cow():
def __init__(self, name=None): #Use a default value
self.name = name
if self.name is None: #use `is` for testing against `None`
raise NoNameCowError("Your cow must have a name")
答案 1 :(得分:0)
我正盯着名字检查;这个对象需要name参数吗?
if self.name == None:
raise NoNameCowError("Your cow must have a name")
我有点Python,但看起来像是一个必需的arg。
答案 2 :(得分:0)
当您声明Cow时,您需要在括号中传递对象:
class Cow(object):
rest of code.
这样Python知道你声明的类是一个带有属性和方法的对象。