1

私はPythonが初めてで、PHPで魔法のメソッドのようなものを作成する方法があるかどうか疑問に思っています( http://www.php.net/manual/en/language.oop5.overloading.php#language. oop5.overloading.methods )

私の目的は、モデル内の子クラスへのアクセスを容易にすることです。基本的に、n 個の子クラスを持つ親クラスがあります。これらのクラスには、言語キー、翻訳キー、翻訳値の 3 つの値があります。は、一種の一般的な変換処理を記述しています。親クラスは、それぞれ異なる言語で異なる翻訳キーの翻訳を持つことができます。たとえば、キー「タイトル」はドイツ語と英語に翻訳でき、キー「説明」も(これまでなど)

子クラスを取得して、設定値でフィルター処理したくありません (少なくとも、明示的ではありませんが、魔法のメソッドの背後にある具体的な実装がこれを行います)。電話したい

parent_class.title['de']
# or also possible maybe
parent_class.title('de')

ドイツ語 (de) のタイトルの翻訳を取得します。

そのため、呼び出されたメソッドの名前とそのパラメーターを取る魔法のメソッドが必要です (PHP のように)。私がPythonを掘り下げた限り、これは単純な属性(__getattr__、__setattr__)またはクラス内で直接設定/取得すること(__getitem__、__setitem__)でのみ可能であり、どちらも私のニーズに適合しません。

多分これに対する解決策はありますか?助けてください!前もって感謝します!

4

2 に答える 2

4

メソッドを持つparent_class.titleのオブジェクトを返します__getitem__

class parent_class:
    def __init__(self):
        self.title = multilang("hello world");

class multilang:
    def __init__(self, text):
        pass
    def __getitem__(self, key):
        if key == 'en':
            return "hello world";
于 2010-06-14T11:44:57.417 に答える
1

コードを にリファクタリングできますparent_class['de'].title。次に、このようなものはおそらくうまくいくでしょう

from collections import defaultdict

class X(object):
    def __init__(self, title = "", description = ""):
        self.title = title
        self.description = description

parent_class = defaultdict(X)

parent_class['en'] = X("title", "description")
parent_class['de'].title = "Titel"
于 2010-06-14T11:47:23.997 に答える