面向对象的编程-遍历参数

时间:2019-04-24 17:16:17

标签: python

我在遍历一个参数并仅显示“ cat”参数时遇到问题。请记住,我正在将项目添加到一个空列表self.item。我也正在使用showAllFormatted函数来格式化数据。

我尝试循环,然后使用“ return AllItems.ShowAllFormatted(i.cat)”,但是将项目添加到空列表后没有结果显示。

class AllItems:

    def __init__(self, cat,comment, worth, amount):
        self.cat = cat
        self.comment= comment
        self.worth = worth
        self.amount = amount

    def ShowAllFormatted(self):
        print('{:>10}:>10}{:>10}{:>10}'.format(self.cat, 
        self.comment,self.worth,self.amount))

class Collection:

    def __init__(self):
        self.an_item = []

    def add_item(self):
        item = AllItems(cat, comment, worth,amount)
        self.item.append(item)

    def ShowAllItems(self):
        for i in self.an_item:
             AllItems.ShowAllFormatted(i)
        return i

    def showAllCat(self):
        for item in self.an_item:
             return item.cat

2 个答案:

答案 0 :(得分:0)

我认为您在构造函数中的意思是self.category = cat

答案 1 :(得分:0)

这是您的代码的有效版本……它甚至可以满足您的要求:

class Item:

    def __init__(self, cat, comment, worth, amount):
        self.cat = cat
        self.comment= comment
        self.worth = worth
        self.amount = amount

    def show_formatted(self):
        print('{:>10}{:>10}{:>10}{:>10}'.format(self.cat, 
                                                self.comment,
                                                self.worth,
                                                self.amount,
                                                )
             )
        return None


class Collection:

    def __init__(self):
        self.items = []

    def add_item(self, cat, comment, worth, amount):
        item = Item(cat, comment, worth, amount)
        self.items.append(item)
        return None

    def show_all_items(self):
        for item in self.items:
            item.show_formatted()
        return None

    def get_all_cats(self):
        return [item.cat for item in self.items]

您可以使用以下方法进行测试:

>>> c = Collection()  # Instantiate a Collection object.
>>> c.add_item('C', 'comment', 10, 1000)  # Add an item to it.
>>> c.add_item('C', 'words', 9, 999)  # Add another.
>>> c.show_all_items()
         C   comment        10      1000
         C     words         9       999

这里发生了很多事情:

  • 我将AllItems类的名称更改为Item,因为它似乎想代表一件事(来自您编写的__ini__())。
  • 我更改了ShowAllFormatted方法的名称,因为该类的每个实例(基本上是self)只需要担心一件事:本身。 IT部门不知道/不在乎成为集合的一部分。
  • add_item类中的Collection方法不接受任何参数,因此我添加了它们。现在,它可以使用一些数据实例化Item类的实例。
  • 我摆脱了ShowAllCat,因为我不确定该怎么做。也许以猫的名字作为参数,然后循环使用该猫的项目,然后调用其show_formatted方法?这样的事情。但是您不需要将任何内容传递给show_formatted,它现在不需要任何其他参数(但是可以说是要控制事物的打印方式)。

我修复了其他几件事,并使用了更多的Pythonic名称(类的首字母大写,其他所有字母小写)。但是其余大部分都没有改变。

别忘了向所有类和方法添加文档字符串!