繁体   English   中英

Python中的魔术方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM