gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:00 24 4
gpt4 key购买 nike

当我从 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(){} });

注意:我不是询问如何执行特定示例函数,我试图能够使用 getset 基本数据类型(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中,它更简单,因为所有类都是新式类

关于javascript - Python 相当于 JavaScript 的 `Object.defineProperty()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32387549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com