1

我对 Python 有点陌生,我想知道是否有一种方法可以在 PHP 中创建类似魔法方法的东西(http://www.php.net/manual/en/language.oop5.overloading.php#language。 oop5.overloading.methods )

我的目标是简化模型中子类的访问。我基本上有一个有 n 个子类的父类。这些类具有三个值,语言键、翻译键和翻译值。描述了一种通用的翻译处理。父类可以有不同翻译键的翻译,每个翻译键都用不同的语言。例如,键“title”可以翻译成德语和英语,键“description”也可以(等等)

我不想获取子类并通过设置值进行过滤(至少我想要但不是明确地,魔术方法背后的具体实现会这样做)。我想打电话

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

用于获得德语(de)标题的翻译。

所以必须有一个神奇的方法,它采用被调用方法的名称及其参数(如在 PHP 中)。就我对 Python 的研究而言,这只能通过简单的属性(__getattr__,__setattr__)或直接在类(__getitem__,__setitem__)中设置/获取,这两者都不符合我的需求。

也许有一个解决方案?请帮忙!提前致谢!

4

2 回答 2

4

返回具有__getitem__方法的 parent_class.title 的对象。

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 回答