在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]
使用此命令的原因与在类中看到计算属性的原因相同:作为属性的表示形式,无需两次存储相同的信息。
答案 0 :(得分:2)
不。变量查找和属性查找是Python中完全独立的机制。一个可能发生的事情在另一个可能发生的事情中不一定是可能的,在这种情况下,变量没有property
的等效项。
答案 1 :(得分:1)
如果您的用法仅仅是在命令行中写出您的属性,但是您总会得到一个字符串(并且您还可以进行任何评估),这是一种黑客方法。在运行交互式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)