6
class MyClass(Object):

    def __init__(self, x=None):
        if x:
            self.x = x
    def do_something(self):
        print self.x

现在我有两个对象

my_class1 = MyClass(x)

my_class2 = MyClass()

我想在调用这个 my_class2 对象时使用 x

与其他语言一样支持静态变量,如 java、c++ 等。

4

3 回答 3

4

将其作为属性分配给类:

>>> class MyClass(object):
    def __init__(self, x=None):
        if x is not None:
            self.__class__.x = x
    def do_something(self):
        print self.x  # or self.__class__.x, to avoid getting instance property

>>> my_class1 = MyClass('aaa')
>>> my_class2 = MyClass()
>>> my_class2.do_something()
aaa
于 2012-07-27T12:06:20.713 回答
3

Python 中没有静态变量,但您可以为此使用类变量。这是一个例子:

class MyClass(object):
    x = 0

    def __init__(self, x=None):
        if x:
            MyClass.x = x

    def do_something(self):
        print "x:", self.x

c1 = MyClass()
c1.do_something()
>> x: 0

c2 = MyClass(10)
c2.do_something()
>> x: 10

c3 = MyClass()
c3.do_something()
>> x: 10

当您调用时self.x- 它首先查找实例级变量,实例化为self.x,如果未找到 - 然后查找Class.x. 因此,您可以在类级别定义它,但在实例级别覆盖它。

一个广泛使用的示例是使用默认类变量,并可能覆盖到实例中:

class MyClass(object):
    x = 0

    def __init__(self, x=None):
        self.x = x or MyClass.x

    def do_something(self):
        print "x:", self.x

c1 = MyClass()
c1.do_something()
>> x: 0

c2 = MyClass(10)
c2.do_something()
>> x: 10

c3 = MyClass()
c3.do_something()
>> x: 0
于 2012-07-27T12:08:03.247 回答
0

你不能。您可以改用类属性:

class Klass:
   Attr = 'test'

# access it (readonly) through the class instances:
x = Klass()
y = Klass()
x.Attr
y.Attr

阅读有关 Python 类的更多信息。

于 2012-07-27T12:00:33.567 回答