python-3.x - 编写类,使得调用实例返回所有实例变量
问题描述
我已经回答了我自己的问题 - 请参阅下面的答案
我正在写一堂课,我想要这种行为:
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”,并修改了标题
解决方案
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,但没有给出一个明确的例子。
推荐阅读
- spring-boot - 为什么对于只有 2 列的简单表来说,为 JpaRepo 设置参数太慢?
- apache - OpenBSD 中继+httpd 与 nginx。带有 tls 客户端证书的反向代理
- c# - ASP.NET Core 3.0 可以用吗?
- coq - Coq:证明带有非递归构造函数的归纳类型是无人居住的
- mysql - 仅在字段为空时设置唯一约束
- firebase - 将单个对象导入 Firebase
- python - 如何强制 MIDI 设备报告控制状态?
- cassandra - STCS:如何提高压实性能?
- c - 父子之间的通信 dup()
- owl - 如何比较 swrl 中的日期时间持续时间?