Python 如何从类外部更新类内的实例变量?

Python 如何从类外部更新类内的实例变量?,python,Python,下面是问题的一些示例代码: 运行此操作时,参数不会更改,并且会打印两次0,因为构造函数只调用一次。有没有办法让属性始终直接引用myVar变量?您可以像这样直接访问class属性:myObject.property=1。 或者,您可以添加一个类方法来设置属性,如下所示: def setProp(self, val): self.property = val 这通常是更好的编码实践,因为类属性只应在类内修改。嗯。。。Python的最佳实践是避免像这样不必要的getter/setter函数

下面是问题的一些示例代码:


运行此操作时,参数不会更改,并且会打印两次0,因为构造函数只调用一次。有没有办法让属性始终直接引用
myVar
变量?

您可以像这样直接访问class属性:
myObject.property=1
。 或者,您可以添加一个类方法来设置属性,如下所示:

def setProp(self, val):
    self.property = val

这通常是更好的编码实践,因为类属性只应在类内修改。

嗯。。。Python的最佳实践是避免像这样不必要的getter/setter函数。如果该属性的前缀不是下划线,则它通常被视为公共API的一部分,欢迎您随意阅读或编写(只要它遵循类的预期类型和内容)。
@property
decorator存在,因此如果getter/setter不再是“简单”属性,并且需要get和set上的逻辑,则可以将此类公共属性更改为无缝使用getter/setter“对于简单的公共数据属性,最好只公开属性名称,而不公开复杂的访问器/变异器方法。请记住,如果您发现一个简单的数据属性需要增加功能性行为,Python提供了一条通向未来增强的简单途径。在这种情况下,使用属性将函数实现隐藏在简单的数据属性访问语法后面。“很公平。从C++中设置类属性之外的类函数总是让我紧张。如果getter/设置只是获取或设置,那么我同意这是不必要的。我通常更喜欢setter来确保值是有效的。@L.MacKenzie在python中。Python使用“有没有一种方法可以让属性始终直接引用myVar变量?”-没有。变量不是这样工作的
myObject.property
只能引用对象,不能引用变量。@user2357112,嗯,有一个细微差别:如果一个可变类型的变量(字典、元组、列表等)没有被重新定义,而是被更改,那么上面的代码就可以工作了
def setProp(self, val):
    self.property = val