Skip to main content
 首页 » 编程设计

javascript之Python 相当于 JavaScript 的 `Object.defineProperty()`

2025年05月04日26xiaohuochai

当我从 JavaScript 过渡到 Python 时,我注意到我还没有想出一种方法来向数据类型类添加属性。 例如,在 JavaScript 中,如果我希望能够键入 arr.last 并让它返回数组 arr 中的最后一个元素,或者键入 arr。 last = 'foo' 并将最后一个元素设置为 'foo',我会使用:

Object.defineProperty(Array.prototype,'last',{ 
    get:function(){ 
        return this[this.length-1]; 
    }, 
    set:function(val){ 
        this[this.length-1] = val; 
    } 
}); 
 
var list = ['a','b','c']; 
console.log(list.last); // "c" 
list.last = 'd'; 
console.log(list); // ["a","b","d"] 

但是,在 Python 中,我不确定如何执行与 Object.defineProperty(X.prototype,'propname',{get:function(){},set:function(){} });

注意:我不是询问如何执行特定示例函数,我试图能够使用 get 和 set 基本数据类型(str、int、float、list、dict、set 等)

请您参考如下方法:

在 Python 21 中,向新样式类(派生自 object 的类)添加新属性(又名成员对象,包括方法)就像简单地定义它们:

class Foo(object): 
    def __init__(self): 
        self._value = "Bar" 
 
def get_value(self): 
    return self._value 
 
def set_value(self, val): 
    self._value = val 
 
def del_value(self): 
    del self._value 
 
Foo.value = property(get_value, set_value, del_value) 
f = Foo() 
 
print f.value 
f.value = "Foo" 
print f.value 

我使用 property Dan D. 在 his answer 中提到的内置,但这实际上是在创建类后分配属性,就像问题所问的那样。

Online demo

1:在Python 3中,它更简单,因为所有类都是新式类