我希望有人能给我一些关于我的代码的建议吗? 我通过自学课程学习python,其中一项需求如下:Python帮助高级对象:特殊方法
创建一个名为centipede.py的程序,其中包括一个名为“Centipede”的类。这个类有以下要求:
如果调用一个价值一旦被实例化,它附加这样的说法对内部列表:
>>> from centipede import Centipede >>> ralph = Centipede() >>> ralph('pretzel') >>> ralph.stomach ['pretzel']
如果打印()的类,它返回一个内部列表的逗号分隔的字符串:
>>> ralph('pickles') >>> print(ralph) 'pretzel,pickles'
每个属性被蜈蚣对象上设置时间,它附加属性的名称ANOT她的内部清单:
>>> ralph.shoes = 100 >>> ralph.hat = 1 >>> ralph.legs['shoes', 'hat']
蜈蚣对象的形式必须是一个逗号分隔的第二个内部列表的字符串。
>>> ralph 'shoes,hat'
这里是到目前为止我所编写的代码:
class MixIns:
def __setattr__(self, key, value):
print("ATTR: setting attribute {0!r} to {1!r}".format(key, value))
self.__dict__[key] = value
def __getattr__(self, key):
print("ATTR: getting attribute {0!r}".format(key))
self.__setattr__(key, "No value")
return "No value"
class Centipede(MixIns):
legs = []
stomach = []
def __init__(self):
MixIns.__init__(self)
def __str__(self):
return self.name
def __call__(self, *args):
[self.stomach.append(arg) for arg in args]
def __repr__(self):
return ','.join(self.legs)
这些是通过命令行运行上面的代码的结果:
- 排序的作品我可以创建实例但无法设置属性
- 打印不显示列表
- 我可以设置属性,但“ralph.legs”不返回任何
- 不工作
我想不通我要去的地方错了吗?
代码通过用四个空格缩进来进行格式化。 8在列表中。 –
顺便说一句,提示:在你的'__call__'方法中,你使用列表理解来将参数附加到另一个列表。这意味着你正在创建另一个大小为args的列表(由'None'填充,因为这是每次调用时返回的'append')在列表中追加内容,因此无意中浪费内存。你应该用一个简单的'for'循环替换它。 –