首页 > 解决方案 > 编写类,使得调用实例返回所有实例变量

问题描述

我已经回答了我自己的问题 - 请参阅下面的答案
我正在写一堂课,我想要这种行为:

a = f(10,20)
some_funct(a.row) # some_function is given 10
some_funct(a.col) # some_function is given 20
some_funct(a)     # some_function is given a tuple of 10, 20  <-- THIS ONE :)

最后一个行为难倒我。我还没有看到任何涵盖这一点的例子。

迄今:

class f(object):
    """Simple 2d object"""
    row: int
    col: int

    def __init__(self, row, col):
        self.row = row
        self.col = col

明确地说,我不想要另一种方法,比如 self.both = row, col。我只想“调用”实例

我是新来的课程,所以欢迎任何改进。属性、setter、getter 等。

编辑1:在问题中将“print”替换为“some_function”,并修改了标题

标签: python-3.xclassreturnsubclasssubclassing

解决方案


class f(tuple):
    """Simple 2d object"""
    def __new__(cls, x, y):
        return tuple.__new__(f, (x, y))

    def __init__(self, x, y):
        self.col = x
        self.row = y

foo = f(1,2)
print(foo.col)
>>>1
print(foo.row)
>>>2
print(foo)
>>>(1, 2)

重要的是:
如果你想让它表现得像一个元组,那么让它成为一个元组的子类。

周围有很多东西,但偶然发现了一个外部网站,它给了我关于要在这里搜索的关键字的线索。SO问题在这里,但我稍微修改了这个答案。
我仍然有点困惑,因为另一个站点说在 init 中也使用new,但没有给出一个明确的例子。


推荐阅读