我发现之前关于在(Iron)Python中定义静态方法的讨论,但是,我没有发现任何关于静态属性的讨论。我假设您可以确定地创建静态属性,因为属性只是.NET CLR的方法,而这正是我在下面代码中所做的,看起来,通过调用静态属性“StaticField”我无法访问它链接到的静态字段“\uu StaticField”的值,而是在该属性存储的位置得到一个引用?,但如果我使用静态方法“getStaticField”作为Get属性,它会正确地为我提供值“2”。在
所以问题是:你能在Python中定义静态属性吗?如何使用它们来获取值而不是对property方法的引用?在
提前谢谢。在
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
这个答案一般适用于python,而不是针对IronPython。在
property
是创建描述符的一种方便方法,它提供了__get__
和可选的__set__
和{__get__
方法接受目标实例和关联类的参数,但从未对类调用__set__
。如果您只需要getter行为而不需要setter行为,只需直接实现一个描述符在setter的情况下,您可以提供一个}将需要一个新的元类。在
__set__
方法,它从实例中推断出类,但是安排Test.staticField = newvalue
来调用{相关问题 更多 >
编程相关推荐