[英]Magic Methods in Python
我是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__)来实现,而这两个都不符合我的需求。
也许对此有解决方案? 请帮忙! 提前致谢!
返回具有__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";
您可以将代码重构为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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.