首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性属性: point.coord、point.coord.x和point.coord.y

属性属性: point.coord、point.coord.x和point.coord.y
EN

Stack Overflow用户
提问于 2021-01-06 19:38:02
回答 2查看 62关注 0票数 0

我不知道具体如何表示它,但是我想创建一个类Point,它可以以元组和单独的方式访问点的坐标,如下所示:

代码语言:javascript
复制
point.coord
# tuple (x,y)

point.coord.x
point.coord.y
# coordinates x and y

我是否必须声明一个方法point.coord(),或者是否存在属性的属性?另外,为了其他目的,更长的嵌入式属性(object.attr1.attr2.attr3)怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-06 21:33:08

代码语言:javascript
复制
class Coord(tuple):
    def __init__(self, points):
        self.x, self.y = points

class Point:
    def __init__(self, *points):
        self.coord = Coord(points)


point = Point(1, 2)

print(point.coord)
print(point.coord.x)
print(point.coord.y)
票数 0
EN

Stack Overflow用户

发布于 2021-01-06 20:20:12

这是给你的一个小问题。如果从tuple继承,则返回类型仍然是tuple,那么只需要Point的包装器和访问tuple属性的方法。这可以通过namedtuple或如下方式实现:

代码语言:javascript
复制
In [52]: class Coord(tuple):
    ...:     def __init__(self, xy):
    ...:         super().__init__()
    ...:         x, y = xy
    ...:         self._x = x
    ...:         self._y = y
    ...:     @property
    ...:     def x(self):
    ...:         return self._x
    ...:     @property
    ...:     def y(self):
    ...:         return self._y
    ...:

In [53]: class Point:
    ...:     def __init__(self, coord: Coord):
    ...:         self.coord = coord
    ...:

In [54]: p = Point(Coord((5,12)))

In [55]: p.coord
Out[55]: (5, 12)

In [56]: p.coord.x
Out[56]: 5

In [57]: p.coord.y
Out[57]: 12
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65602349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档