gpt4 book ai didi

Python - 类变量与值字典

转载 作者:太空狗 更新时间:2023-10-30 02:20:08 25 4
gpt4 key购买 nike

假设我有一个类,它表示一个具有许多属性(简单数据类型,如字符串和整数)的对象。它们应该表示为实例变量还是更好的“pythonic”是将它们放入字典?

例如:

class FruitBasket:
def __init__(self,apples, oranges, bananas, pears): #number of apples, oranges etc...
self.apples = apples
self.oranges = oranges
self.bananas = bananas
self.pears = pears



class FruitBasket:
def __init__(self, fruits): #fruits is a dictionary
self.fruits = fruits

最佳答案

我的一般理念是,如果项目集或多或少是固定的,则使用属性;如果项目集可能会临时更改,则使用字典。如果您的 FruitBasket 专门用于包含苹果、橙子、香蕉和梨,则使用属性。如果它可能包含任何随机分类的其他东西(例如,您有时可能会扔进菠萝或覆盆子),请使用字典。

即使在您的示例代码中也可以看出其中一个原因。如果您使用属性,则必须在代码中逐字指定每个属性(例如,self.pears)。此外,您通常最终会做您在此处所做的事情,您将每个项目作为参数显式传递给 __init__。如果您稍后决定添加新水果,这显然不会起作用。您可以继续向 __init__ 添加更多参数,但这很快就会变得笨拙。

此外,如果您有一组固定的项目,您可能会单独访问它们。也就是说,如果您知道自己只有苹果、橙子、香蕉和梨,则可以像此处一样按名称直接访问它们(self.applesself.oranges 等)。如果您事先不知道篮子里可能有什么水果,您就无法知道先验使用什么名称,因此您通常会通过遍历它们来处理它们。迭代字典的项目非常容易。相比之下,迭代对象的属性充满了危险,因为您无法轻易地区分包含对象“关于”(例如,self.pears)的数据的属性和那些属于对象本身的结构(例如,self.__init__self.basketColorself.basketSize 等)。

简而言之,如果您事先不知道篮子里会有什么,您会想要迭代它的内容,如果您想迭代某些内容,最好使用专为包含(如列表或字典),因为这些类型清楚地将容器与其内容分开。

关于Python - 类变量与值字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25168755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com