2

私はクラス変数とインスタンス変数について少し読んで、私がやろうとしていることのためにファクトリーパターンを実装することに関するさまざまな投稿を見てきました...それは私がPythonにかなり慣れていないと言い、安全のためにこれを健全にチェックしたいと思っていました.一般的な良いデザインと悪いデザイン。

私は基本的に、その場でインスタンス化できるクラスを持ち、独自のグローバル リストを管理したいと考えています。そのため、クラスの任意のインスタンスを参照し、必要に応じて他のすべてのインスタンスにアクセスできます。これを行うことの利点は、任意の関数がグローバルリストにアクセスできるようにすることです (また、クラス自体がインスタンスごとに一意の識別子を割り当てることができます。すべてクラスにカプセル化されています)。

これは私が取ろうと考えていた単純化されたアプローチです...これは良い形ですか、そして/またはこのアプローチでクラス変数の概念(この場合は私のリスト)を誤用していますか?

アドバイスをありがとう...もちろん、これに答える他の投稿を私に指摘してください..私はそれらすべてを読み続けていますが、正確な正しい答えを見つけたかどうかはわかりません.

ジェフ

class item(object):

    _serialnumber = -1  # the unique serial number of each item created.

    # I think we refer to this (below) as a class variable in Python? or is it really?  
    # This appears to be the same "item_list" across all instances of "item", 
    # which is useful for global operations, it seems

    item_list = []    

    def __init__(self, my_sn):
        self.item_list.append(self)
        self._serialnumber = my_sn

# Now create a bunch of instances and initialize serial# with i.
# In this case I am passing in i, but my plan would be to have the class automatically
# assign unique serial numbers for each item instantiated.

for i in xrange(100,200):
    very_last_item = item(i)  

# Now i can access the global list from any instance of an item

for i in very_last_item.item_list:
    print "very_last_item i sn = %d" % i._serialnumber
4

1 に答える 1

1

クラス変数を正しく宣言していますが、正しく使用していません。selfインスタンス変数を使用していない限り、を使用しないでください。あなたがする必要があるのは:

item.item_list.append(self)
item._serialnumber = my_sn

self の代わりにクラス名を使用すると、クラス変数を使用することになります。

_serialnumber is really used for the instance you dont have to declare outside the初期化以来function. Also when reading the instances you can just useitem.item_list . you dont have to use thevery_last_item`

class item(object):



    # I think we refer to this (below) as a class variable in Python? or is it really?  
    # This appears to be the same "item_list" across all instances of "item", 
    # which is useful for global operations, it seems

    item_list = []    

    def __init__(self, my_sn):
        item.item_list.append(self)
        self._serialnumber = my_sn

# Now create a bunch of instances and initialize serial# with i.
# In this case I am passing in i, but my plan would be to have the class automatically
# assign unique serial numbers for each item instantiated.

for i in xrange(1,10):
    very_last_item = item(i)  

# Now i can access the global list from any instance of an item


for i in item.item_list:
    print "very_last_item i sn = %d" % i._serialnumber
于 2013-10-31T17:26:08.630 に答える