【发布时间】:2021-07-07 20:42:53
【问题描述】:
我想编写一个带有属性的 Python 类(我在这里称其为“位置”),它可以以两种不同的、依赖于上下文的方式使用——有点像在 C 中可以用工会:
第一种方式,它有子属性——我称它们为 x 和 y:
my_object.position.x = 12
my_object.position.y = 13
print(my_object.position.x) # prints 12
第二种方式,获取并传递一个元组:
my_object.position = (12, 13)
print(my_object.position) # prints (12, 13)
我尝试这样做只是因为有时作为元组访问更方便,有时作为命名子属性访问。意图是元组和子属性表示相同的信息,因此 tuple[0] 是 x 属性,tuple[1] 是 y 属性,如:
my_object.position = (12, 13)
my_object.position.y = 14
print(my_object.position) # prints (12, 14)
我知道如何让它工作(子属性或元组),但不能同时工作。
(我知道元组是不可变的——数据不需要作为元组存储在对象中。)
我也已经知道如何让 setter 检查输入的类型,以便它可以(例如)接受元组或无。
在 Python 中是否有(合理的)方法可以做到这一点?这是一个坏主意吗?
【问题讨论】:
标签: python methods properties