正如标题所说。
来自Java im过去:
private int A;
public void setA(int A) {
this.A = A;
}
public int getA() {
return this.A
}
如果需要的话,我应该如何在Python中做到这一点。
如果__setattr__
或__set__
中的一个用于此,另一个用于什么?
编辑: 我觉得我需要澄清一下。我知道在Python中,doe不会在需要setter和getter之前创建它们。
假设我想做这样的事情:
public void setA(int A) {
update_stuff(A);
and_calculate_some_thing(A);
this.A = A;
}
什么是“Python”的方式来实现这一点?
当描述符被分配给时,
__set__()
在描述符中使用。__setattr__()
用于绑定到对象的属性。除非创建描述符,否则不会使用__set__()
。在python中,类似这样的应该使用
property
实现(然后只有当它们做一些有用的事情时)。在这个例子中,最好这样做(正如爱德华指出的那样):
因为我们的getter/setter方法实际上什么也做不了。。。但是,当setter/getter实际上不仅仅是赋值/返回属性值时,属性变得非常有用。
它也可以使用
__setattr__
/__getattr__
来实现(但不应该这样实现,因为如果类有多个属性,它会很快变得很麻烦。我还认为这样做比使用属性要慢:就
__setattr__
和__getattr__
实际做什么而言。。。__setattr__
/__getattr__
是当您执行以下操作时调用的:至于
__get__
和__set__
:previous posts讨论得很好。注意,在python中没有私有变量。一般来说,在一个以下划线为前缀的类成员中,您不应该弄乱它(除非您知道自己在做什么)。如果它的前缀是2个下划线,它将调用名称管理,这使得在类之外访问变得更加困难。这用于防止继承中的名称空间冲突(而且这些变量通常也不会被弄乱)。
如果getter/setter真的像那样微不足道,那么您甚至不必为它们操心:只需使用一个实例变量。如果您确实需要一个getter/setter来做一些有趣的事情,那么您应该切换到一个属性,如mgilson所描述的。请注意,您可以从实例变量更改为属性,而无需使用代码来注意差异。一、 e.从:
只有当您需要在获取/设置属性时发生有趣的事情时,才会更改基于属性的访问器mgilson。
相关问题 更多 >
编程相关推荐