Python 2.7 - 如何将 Class 属性(指针?)分配给变量(需要它来创建 Oz-esque 数据流变量)
Python 2.7 - How to assign a Class attribute (pointer?) to a variable (Need that to create Oz-esque Dataflow Variables)
有可能吗?
我的想法是我想要一个特殊的变量,它在分配或获取其值时进行一些处理。我也希望它看起来像一个常规变量,所以点符号在这里是个问题。
我知道这不是很明确,但这是我尝试复制 Oz-esque Dataflow Variables.
所需要的
如果 python 库中已经实现了类似这些类型的数据流变量,请告诉我。
示例:
class Promise(object):
def __init__(self):
self._value = 'defalt_value'
@property
def value(self):
#some processing/logic here
return self._value
@value.setter
def value(self, value):
#some processing/logic here
self._value = value
my_promise_obj = Promise()
my_promise = my_promise_obj.value
my_promise = 'Please, set my_promise_obj.value to this string'
print ('Object`s Value: ' + my_promise_obj.value)
print ('My Variable`s value: ' + my_promise)
print ('Has I changed the class attr?: ' + str(my_promise == my_promise_obj))
对于点符号,您需要覆盖
def __setattr__(self, k, v):
和
def __getattr__(self, k):
如果我对你的问题的理解正确,你想控制变量赋值和访问时发生的事情吗?就像你可以在 C++ 中使用 operator=
?
在 Python 中,变量 总是 包含对值的引用。据我所知,你不能拦截这个。
但是,您可以定义 class Var
并重载一些其他运算符,例如 <<
和 ~
并具有如下代码:
v = Var()
w = ~v # wait for v to get a value and assign it to w
v << 42 # single-assignment of a value to v
但我不确定这会比您示例中的 value
属性 更好。
此语法无法在 Python 中用于该目的:
my_promise = 'Please, set my_promise_obj.value to this string'
原因是它重新分配了global/local名称以指向所述字符串;你不能挂钩那个任务;并且在赋值之前它甚至不查询 my_promise
指向的对象。
但是有很多选择;最明显的语法是
具有set
方法的对象:
my_promise.set('Please, set my_promise_obj.value to this string')
方法、闭包或任何具有 __call__
方法的对象:
my_promise('Please, set my_promise_obj.value to this string')
具有数据描述符的对象:
my_promise.value = 'Please, set my_promise_obj.value to this string'
或一些非常疯狂的东西(只是多种可能性的一些例子):
具有 __iadd__
的对象:
my_promise += 'Please, set my_promise_obj.value to this string'
一个对象 __xor__
:
my_promise ^ 'Please, set my_promise_obj.value to this string'
具有 __rrshift__
的对象:
'Please, set my_promise_obj.value to this string' >> my_promise
可以覆盖以设置值。
有可能吗?
我的想法是我想要一个特殊的变量,它在分配或获取其值时进行一些处理。我也希望它看起来像一个常规变量,所以点符号在这里是个问题。
我知道这不是很明确,但这是我尝试复制 Oz-esque Dataflow Variables.
所需要的如果 python 库中已经实现了类似这些类型的数据流变量,请告诉我。
示例:
class Promise(object):
def __init__(self):
self._value = 'defalt_value'
@property
def value(self):
#some processing/logic here
return self._value
@value.setter
def value(self, value):
#some processing/logic here
self._value = value
my_promise_obj = Promise()
my_promise = my_promise_obj.value
my_promise = 'Please, set my_promise_obj.value to this string'
print ('Object`s Value: ' + my_promise_obj.value)
print ('My Variable`s value: ' + my_promise)
print ('Has I changed the class attr?: ' + str(my_promise == my_promise_obj))
对于点符号,您需要覆盖
def __setattr__(self, k, v):
和
def __getattr__(self, k):
如果我对你的问题的理解正确,你想控制变量赋值和访问时发生的事情吗?就像你可以在 C++ 中使用 operator=
?
在 Python 中,变量 总是 包含对值的引用。据我所知,你不能拦截这个。
但是,您可以定义 class Var
并重载一些其他运算符,例如 <<
和 ~
并具有如下代码:
v = Var()
w = ~v # wait for v to get a value and assign it to w
v << 42 # single-assignment of a value to v
但我不确定这会比您示例中的 value
属性 更好。
此语法无法在 Python 中用于该目的:
my_promise = 'Please, set my_promise_obj.value to this string'
原因是它重新分配了global/local名称以指向所述字符串;你不能挂钩那个任务;并且在赋值之前它甚至不查询 my_promise
指向的对象。
但是有很多选择;最明显的语法是
具有
set
方法的对象:my_promise.set('Please, set my_promise_obj.value to this string')
方法、闭包或任何具有
__call__
方法的对象:my_promise('Please, set my_promise_obj.value to this string')
具有数据描述符的对象:
my_promise.value = 'Please, set my_promise_obj.value to this string'
或一些非常疯狂的东西(只是多种可能性的一些例子):
具有
__iadd__
的对象:my_promise += 'Please, set my_promise_obj.value to this string'
一个对象
__xor__
:my_promise ^ 'Please, set my_promise_obj.value to this string'
具有
__rrshift__
的对象:'Please, set my_promise_obj.value to this string' >> my_promise
可以覆盖以设置值。