【发布时间】:2024-10-11 21:50:01
【问题描述】:
因此,为了练习 Python 并更具体地了解面向对象编程,我编写了这个简单的脚本来更好地理解这些概念。但是,当我尝试启动“猴子”对象时,最终发生的事情是 Python 无限期地添加了我的第一个猴子对象的名称……我接近 OOP 对吗?如果是这样,我哪里错了,因为我不知道...... 谢谢
#! usr/bin/python
monkeylist = []
class monkey:
def __init__(self, name):
self.name = name
self.banana = []
monkeylist.append(self.name)
def addbanana(self, kind):
self.banana.append(kind)
class monkeys:
def __init__(self, monkeylist):
self.allmonkeys = monkeylist
self.monkeydict = {}
for name in self.allmonkeys:
self.allmonkeys[name] = monkey(name)
def addbanana(self, name, kind):
self.monkeydict[name].addbanana(kind)
准确的输入输出是这样的……
python -i objtest.py
>>> bob = monkey("bob")
>>> test = monkeys(monkeylist)
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "objtest.py", line 15, in __init__
self.allmonkeys[name] = monkey(name)
File "objtest.py", line 7, in __init__
monkeylist.append(self.name)
KeyboardInterrupt
【问题讨论】:
-
我找不到错误。您能否显示完整的代码,包括您的输出?
-
这似乎对我有用?我正在做 m=monkeys(monkeylist);print type(m) ,它正确返回“type 'instance'”。正如 Achim 所说,您能否发布其余代码并显示输出。
-
未来的两个小注意事项:(1)类名应该在
CamelCase(即Monkey和Monkeys)和变量/成员/函数/方法名应该是lowercase_with_underscores为了公约。 (2) 类应该从 Python 2.x 中的object(class Monkey(object)) 派生,因为“旧式类”只是简单而令人头疼的问题。 -
您似乎在初始化中添加了
monkeylist.append(self.name)。它的缩进错误。仅用于块级别的缩进。如果您在Monkeys类中遍历它以在Monkey类恕我直言中更改它,这也可能不是最好的主意。