我发现前面讨论过在(Iron)Python中定义静态方法,但是,我没有找到关于静态属性的任何信息。我认为你可以明确地创建静态属性,因为属性只是.NET CLR的方法,这就是我在下面的代码中所做的,但是,它看起来像通过调用静态属性“StaticField”我无法访问静态字段“__staticField”它被链接到,而我得到一个引用的属性存储? ,但如果使用用作Get属性的静态方法“getStaticField”,它会正确地给我值“2”。如何定义IronPython的静态属性?
所以问题是:你能在(Iron)Python中定义静态属性吗?以及如何使用它们来获取值而不是对属性方法的引用?
在此先感谢。
class Test(object):
__instanceField = 0
__staticField = 0
# Instance Property (read-only)
def getInstanceField(self):
return self.__instanceField
InstanceField = property(getInstanceField, None, None)
# Static Property (read-only)
@staticmethod
def getStaticField():
return Test.__staticField
StaticField = property(getStaticField, None, None)
# Instance Method
def instanceMethod(self, n):
self.__instanceField += 1
print 'instanceMethod', n
# Static Method
@staticmethod
def staticMethod(n):
Test.__staticField += 1
print 'staticMethod', n
# Calling Static Methods
Test.staticMethod(5)
Test.staticMethod(10)
# Calling Instance Methods
t = Test()
t.instanceMethod(5)
t.instanceMethod(10)
print 'InstanceProperty', t.InstanceField
#prints 2
print 'StaticProperty', Test.StaticField
#prints: <property object at 0x000000000000002B>
print 'StaticPropertyMethod', Test.getStaticField()
#prints 2
我想我发现了什么问题“可以”... 问题似乎是,StaticProperty = property(getStaticField,none,none)将获取Getter参数作为实例方法,这就是为什么当我打电话时它后来它给我属性对象在0x0000 ... 事情是,它不允许我分配一个获取作为静态: StaticField =属性(Test.getStaticField,无,无) 错误:全局测试未定义。 –