我对Python很陌生,我想知道是否有办法在PHP中创建类似神奇的方法(http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.methods)
我的目标是在我的模型中简化子类的访问。我基本上有一个父类,它有n个子类。这些类有三个值,一个是语言键,一个翻译键和一个翻译值。这是描述一种通用的翻译处理。父类可以使用不同语言的不同翻译密钥进行翻译。例如。关键的“标题”可以翻译成德语和英语以及关键的“描述”(到目前为止等等)
我不想通过设置值获取子类和过滤器(至少我想要但不明确,魔术方法背后的具体实现会这样做)。我想打电话
parent_class.title['de']
# or also possible maybe
parent_class.title('de')
获得德语(de)的标题翻译。
因此必须有一个魔术方法,它采用被调用方法及其参数的名称(如在PHP中)。至于我挖到Python,这只能通过简单的属性(__getattr __,__ setattr__)或直接在类(__getitem __,__ setitem__)中设置/获取,这两者都不符合我的需要。
也许这有解决方案?请帮忙! 提前谢谢!
答案 0 :(得分: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";
答案 1 :(得分: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"