2

他のコードで既に広く使用されている Python クラス属性の名前を変更する必要がある場合があります。

問題は、さまざまな理由から、class_instance.old_attribute_name = something. 例えば:

class theClass:
    def __init__(self):
        self.new_attribute_name = 0

o = theClass()
o.new_attribute_name += 3
if o.new_attribute_name > 3 or o.new_attribute_name < 4:
    o.old_attribute_name = 7
do_stuff_with(o.new_attribute_name)

問題は、これを見つけるのが難しく、エラーが発生せず、役に立たない属性が作成されることです。を使用することを検討し__slot__ましたが、私の根深い C/C++ の考え方を Python に強制するような気がします。

そこでお聞きしたいのですが、ここで何が間違っているのでしょうか? インスタンス化以外でアトリビュートの作成を (何らかの方法で) 防止しようとすると、何が失われますか? 浮遊属性の割り当てを処理するPythonicの方法は何ですか?

4

3 に答える 3

3

古い属性名をプロパティにすることができます

class theClass(object):
    def __init__(self):
        self.new_attribute_name = 0

    @property
    def old_attribute_name(self):
        print "Tried to access old_attribute_name"
        return self.new_attribute_name

    @old_attribute_name.setter
    def old_attribute_name(self, value):
        print "Tried to set old_attribute_name"
        return self.new_attribute_name
于 2012-06-14T00:40:20.120 に答える
0

プロパティでこれを行うことができます。古い属性名の取得と設定の両方をブロックします。

class A(object):
    @property
    def old_name(self):
        raise NotImplementedError()
于 2012-06-14T00:56:20.783 に答える
0

検索と置換で変更が必要なすべての場所を見つけようとする代わりに、代わりに「リファクタリング」ツールを試すことができます。

Python にはどのリファクタリング ツールを使用していますか?

于 2012-06-14T00:53:14.777 に答える