繁体   English   中英

Python Class 属性表现为字典

[英]Python Class property behave as Dictionary

我有一个非常简单的 class 定义如下属性:

class Person:
    fields = set()

    @property
    def id(self):
        self.fields.add('id')
        return 'person.id'

这个想法是让这个 class 记录已访问的属性。 现在问题来了,当我需要开始支持时: person.metadata.key ,其中元数据基本上是 HStore object 或 1 级 JSON,密钥是任意的,想法是针对metadata中的 ZA2F2ED4F8EBC2CBB4C21A29DZ1 对 Person 记录的任何密钥的访问. 我试过这样的事情:

class CustomerBulkContext:

    fields = set()

    class PersonMetadata:
        def __getitem__(self, attr):
            fields.add(f'metadata.{attr}')
            return f'person.metadata.{attr}'

    metadata = CustomerMetadataContext()

现在显然问题是 PersonMetadata 中的fields此时不是已知变量。 我该如何克服这个问题,我不知道是否可以在没有太多代码的情况下在 Python 中完成。

为了跟踪像person.metadata.key这样的访问,你必须让person.metadata返回一个 object ,它本身会跟踪它是如何被访问的。 为了跟踪整个链,您将到目前为止的链传递给 object。

就像是:

class AccessTracker:
    def __init__(self, path=()):
        self._path = path

    def __getattr__(self, name):
        print('Accessed %s in %s' % (name, self._path))
        return AccessTracker(self._path + (name,))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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