希望标题不要太误导人,我不确定表达我的问题的最佳方式。
我正在尝试用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的实例。你打算在那里做的事行不通。
如果您只是不想使用点表示法,可以使用namedtuple
或dataclass
来代替类。然后使用tuple()
和astuple()
将它们的实例强制转换为元组。
使用namedtuple
和tuple()
:
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
是不可变的,即不能更改x
和y
。
使用dataclasses.dataclass
和dataclasses.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)