6
class MyClass(Object):

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

今、私は2つのオブジェクトを持っています

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 に答える