我进退两难。我正在制作数百种不同类型的物体。一般来说,他们将是Food
,但主要是它将被指定是什么类型的食物。你知道吗
class Food(object):
def __init__(self, taste = None):
self._taste = taste
class Bread(Food):pass
class Meat(Food):pass
class Soup(Food):pass
与
class Food(object):
def __init__(self, isbread = False, ismeat = False, issoup = False):
self.is_bread = isbread
self.is_meat = ismeat
self.is_soup = issoup
然后我将比较这些对象,就像在一个数组中有两个面包一个接一个。我想知道哪一个更符合'面向对象的艺术',这可能是更python。使用标志似乎比每次比较两个对象时调用实例更快更容易。你知道吗
使用不同的类更像是OOP和python。使用gflags代替gflags仅仅意味着将类型的信息存储在类型中以外的其他地方。你知道吗
现在有趣的部分是使用类型信息,使代码可读、清晰并具有良好的性能。老实说,我会忽略后者而选择好的代码,直到它成为一个问题。你知道吗
由于使用该类型的唯一示例是比较对象是否为同一类型,因此可以很容易地执行以下操作:
您还可以创建方法或重载操作符来对代码的大部分部分隐藏机制,但最简单和最可读的方法在很大程度上取决于您的实际用例。你知道吗
举你在讨论中提到的另一个例子:要比较任何面包是否相等,你可以这样做:
这样显式地做可以让您拥有子类
Baguette(Bread)
和Roll(Bread)
,它们的实例都是breads,它们与Bread
本身的任何实例相比也会相等。你知道吗显然第一个选项更像python,与OOP保持一致。你知道吗
这意味着所有} 内置方法,并检查
Soup
、Meat
和Bread
对象都是Food
,并且具有公共属性。 那么,你需要比较两个物体是否属于同一个食物亚类。只需使用^{True
。例如如果要使用
==
运算符比较对象,只需重写__eq__
(equals)方法。如下所示然后比较像这样的物体
相关问题 更多 >
编程相关推荐