在Python中创建自定义数据类型



希望标题不要太误导人,我不确定表达我的问题的最佳方式。

我正在尝试用Python创建一个(X, Y)坐标数据类型。有没有一种方法可以创建一个";自定义数据类型";这样我就有了一个有值的对象,但也有一些支持属性?

到目前为止,我已经制作了一个简单的类:

class Point:
def __init__(self, x, y):
self.x = x
self.y = y
self.tuple = (x, y)

理想情况下,我希望能够做这样的事情:

>>> p = Point(4, 5)
>>>
>>> my_x = p.x    # can access the `x` attribute with "dot syntax"
>>>
>>> my_tuple = p  # or can access the tuple value directly
# without needing to do `.tuple`, as if the `tuple`
# attribute is the "default" attribute for the object

注意我不想简单地显示元组,我知道我可以使用__repr__方法来实现这一点

在某种程度上,我试图创建一个非常简化的numpy.ndarray,因为ndarray是一个有自己属性的数据类型。我试着查看numpy的来源,看看这是怎么做到的,但这让我不知所措,哈哈。

任何提示都将不胜感激!

我不确定您想对元组做什么。CCD_ 6将始终是CCD_ 7的实例。你打算在那里做的事行不通。

如果您只是不想使用点表示法,可以使用namedtupledataclass来代替类。然后使用tuple()astuple()将它们的实例强制转换为元组。


使用namedtupletuple():

from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p = Point(4, 5)
x = p.x
y = p.y
xy = p  # xy = tuple(p) not necessary since namedtuple is already a tuple

注意:namedtuple是不可变的,即不能更改xy


使用dataclasses.dataclassdataclasses.astuple():

from dataclasses import dataclass, astuple
@dataclass
class Point:
x: int
y: int

p = Point(4, 5)
x = p.x
y = p.y
xy = astuple(p)

最新更新