【发布时间】:2015-07-24 00:05:37
【问题描述】:
我需要一种方法来在 Python 中创建一个只有类才有的静态类变量。我不能为每个实例一遍又一遍地创建这个变量,因为目标类变量将是一个巨大的只读数据结构。每个实例都必须能够通过该类以只读方式访问它,但由于它是大量数据并且将有数千个实例,我无法承受每个实例会再次创建此数据结构的另一个副本。
我找到了this question,但它并没有解决我的问题,因为建议的静态类变量是为每个实例创建的:
>>> class MyClass():
i = 1
>>> m = MyClass()
>>> m.i
1
换句话说,我正在寻找类似 PHP 中的静态类变量:
<?php
class Foo
{
public static $my_static = 'foo';
}
$foo = new Foo();
print $foo::$my_static . "\n"; // Accessable throught the class
print $foo->my_static . "\n"; // Undefined "Property" my_static
?>
这正是我所需要的,静态类变量只为类创建一次,所有实例都可以通过类访问它,但这个静态类变量不会为每个新实例一遍又一遍地创建。是否可以在 Python 中创建这样的静态类变量?
PS:如果我不使用 OOP,我现在有一些解决方法,但如果我能找到一个好的且清晰易读的 OOP 解决方案,那么它在整个项目中会更有意义。
【问题讨论】:
-
你为什么认为仅仅因为你可以访问它作为
m.i它实际上被创建多次? -
“建议的静态类变量是为每个实例创建的” - 不,这是不正确的。
-
您可以从一个实例访问它并不意味着它是为每个实例创建的。
-
@renatov if 你在一个实例上分配
m.i,此时它会创建一个新实例,隐藏类变量。 -
@renatov 是的,没错。
标签: python oop static-variables