【发布时间】:2015-06-02 12:04:03
【问题描述】:
我正在尝试创建一个静态变量以通过不同的类访问,为其分配值,并在需要时获取该值。我确实使用this way 来实现这一点,这导致我包含以下属性:
class GetPartition(Partition):
_i = 100
def __init__(self):
super(Partition,self).__init__("get")
def get_i(self):
return type(self)._i
def set_i(self,val):
type(self)._i = val
i = property(get_i, set_i)
如果需要,这是Partition 类:
class Partition(BaseCommand):
def __init__(self,type):
super(Partition,self).__init__("databaseTest")
self.type = type
所以,当从另一个类为i赋值时,我直接赋值为:
GetPartition.i = 5
在打印GetPartition.i 时,在那个类中它给了我5,但是当试图从另一个类中获取这个值时:
partitionNum = GetPartition()
print(partitionNum.i) # 100
print(partitionNum.get_i()) # 100
print(GetPartition.i) # <property object at 0x12A938D0>
print(GetPartition._i) # 100
【问题讨论】:
-
当您通过
GetPartition.i = 5将5 分配给i时,您将覆盖属性,并绕过 属性设置器。那个时候这个属性已经不存在了。您可以通过GetPartition.i = 5、gp = GetPartition()、gp.i = 2、print(gp.i, GetPartition.i)来确认这一点。属性 getter 和 setter 仅适用于GetPartition的实例,而不适用于类本身。如果您想更新“静态变量”(请记住 Python 实际上没有静态变量),您需要像示例代码中那样执行GetPartition._i = 5。 -
@RickTeachey 起初感谢您的回复,然后我尝试将其设置为
GetPartition._i = 5但在尝试获取它时遇到了类似的问题,有什么想法如何从另一个班级获取它? -
从其他地方获取它的简单方法是使用
print(GetPartition._i)而不是print(GetPartition.i)。我意识到这不是最优的。还有其他方法可以完成您想要的,但我所知道的所有方法都非常复杂。
标签: python static class-variables