【发布时间】:2025-12-18 06:30:01
【问题描述】:
我们可以使用@property 来构造getter 和setter。这是我们如何做到这一点的一个简短示例:
class A:
def __init__(self,x):
self.x = x
@property
def x(self):
return self.__x
@x.setter
def x(self, x):
if x < 0:
self.__x = 0
elif x > 100:
self.__x = 100
else:
self.__x = x
我的情况似乎更复杂。
class A:
def __init__(self, x):
self.__x = x
self.x1()
self.x2()
self.x3()
def x1(self):
self.__x1 = self.__x + 1
return self.__x1
def x2(self):
self.__x2 = self.__x1 + 2
return self.__x2
def x3(self):
self.__x3 = self.__x2 + 3
return self.__x3
if __name__ == "__main__":
a = A(3)
print(a.x3)
方法x1、x2 和x3 过于简单。当调用__init__ 方法时,self.__x3 变量只设置一次。现在,我需要一个getter 方法来通过调用a.x3 来获取self.__x3。如何以 Python 的方式实现?
【问题讨论】:
-
我建议将您的问题分解为一个通用问题,因为有很多与它无关的信息,我个人并不能真正理解您要做什么。
-
请提供您的整个班级 - 很难理解您的问题是什么。
-
我已经简化了描述并添加了考虑的类。
-
这里没有动机,我不知道你为什么还要写
x1/x2/x3作为变异方法,而只有__init__使用它们,而你可以编写内部辅助函数(例如_x1/_x2/_x3供__init__使用)并为x1/x2/x3使用常规非变异属性(供公众使用)。这很臭an XY problem。即使这样有效,外部用户对x3的使用应该修改__x3,还是直接返回? -
@ShadowRanger 你是对的。我在方法名称之前考虑了
_。我在编辑我的帖子之前询问了它以便更容易理解。不,__x3不能修改。现在我看到您的解决方案(xN的非变异属性)是我所需要的。
标签: python python-3.x class getter-setter