gpt4 book ai didi

python - 不同的返回类型,重载 __add__

转载 作者:行者123 更新时间:2023-12-04 07:53:53 24 4
gpt4 key购买 nike

我希望实现如下内容。有一个类foo其中包含 infoo 的列表对象。我在想,为了重载 __add__运营商我应该

class foo(object):
def __init__(self, infoo_list):
self.args = infoo_list

def __add__(self, other):
if isinstance(other, type(self)):
newargs = self.args + other.args
return foo(newargs)
elif isinstance(other, infoo_type):
newargs = self.args + [other]
return foo(newargs)


class infoo (object):
def __init__(self):
pass

def __add__(self, other):
return foo([self, other])


infoo_type = type(infoo())
如您所见 fooinfoo 的容器对象。您可能有一个 infoo宇宙中唯一的对象并对其进行操作。但是,无论如何,如果您必须管理多个, foo对象开始发挥作用。
即使用户可以实例化 infoo对象播放,代码面向让 foo的界面每当有多个时处理 infoo .
这是好的做法吗?我是否违反了一些黄金法则?

最佳答案

基本上包含在评论中,但像这样的设计会更简洁:

class InFoo:
pass

class Foo:
def __init__(self, infoos):
self.args = list(infoos)

def __add__(self, other):
if isinstance(other, __class__):
oargs = other.args
elif isinstance(other, InFoo):
oargs = [other]
return foo(self.args + oargs)
似乎没有任何很好的理由来定义 __add__InFoo ,因为在这种情况下添加仅对容器有意义。这也消除了在外部定义 infoo_type 的需要。 . Python 约定是将类名命名为 CamelCase 和几乎所有其他的蛇形。

关于python - 不同的返回类型,重载 __add__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66803769/

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