在Swift中,我们可以在任何范围内(包括另一个函数内部)执行以下操作:
var X:Int = 3
var twiceX:Int{
return 2*X
}
print(twiceX) //6
这意味着我们可以在不使用“()”语法的情况下调用getter函数。任何不带参数并返回一个值的函数也可以实现为计算机属性。另外,还可以提供设置器功能。
我看到可以使用@property声明符来使属于类的计算属性成为可能,但是我看不到将其设为全局属性的方法。我希望在类范围内一切可能,在全局范围内一切可能。
Python中是否有全局计算的属性?
备注:我知道它主要是合成糖,每次通话都消除一对“()”。但是,在某些情况下,属性比函数更直观。一个例子是:
queue = [1,4,7]
def current():
return queue[0]
这是出于与在类中看到计算属性的相同原因:作为属性的表示,而没有两次存储相同的信息。
没有变量查找和属性查找是Python中完全独立的机制。一种情况下可能发生的事情在另一种情况下不一定是可能的,在这种情况下,变量没有property
的等效项。
如果您的用法仅是在命令行中写出您的属性,但是您总会得到一个字符串(并且您还可以进行任何评估),这是一种骇人听闻的方法。在运行交互式shell时,有时会用它来制作漂亮的命令行语法糖。这是要覆盖包装类的__repr__
方法(问题中,您的属性创建者):
queue = [1, 2, 3, 4, 5]
class currentQueueProp:
def __init__(self, transform=lambda x: x):
self.transform = transform
def __repr__(self, transform = lambda x: x):
return str(self.transform(queue[0]))
current = currentQueueProp()
twice_current = currentQueueProp(lambda x: 2*x)
queue[0] = 3
print(current, twice_current) # What you expect
请注意,current
和twice_current
是您的类,而不是队列的当前值。因为
>>> x = twice_current
>>> x
似乎显示3
(从上一个示例继续),但是x
当然是currentQueueProp
类型,您不能在其上使用算术等:
f(x) # Not equivalent to f(3)