我希望有人能給我一些關於我的代碼的建議嗎? 我通過自學課程學習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'循環替換它。 –