【问题标题】:Accessing python containing classes or objects访问包含类或对象的python
【发布时间】:2011-09-17 15:22:09
【问题描述】:

添加为属性时如何访问当前类中的调用/外部/容器 python 类。考虑这个例子......

class a():
    @staticmethod
    def meth():
        print 'Who called me?'

class b():
    my_a = a

class c():
    my_a = a

b.my_a.meth()
>> Who called me?

c.my_a.meth()
>> Who called me?

所以这个例子中的问题是如何在 a.meth() 中知道它是从 b 类还是 a 类调用的?

上面显然是静态类和方法,上面的解决方案是否也适用于包含对象?

【问题讨论】:

    标签: python oop static-methods


    【解决方案1】:

    没有很好的方法可以知道 meth() 函数是如何被访问的。当它被调用时,它只是一个函数。如果你改用@classmethod,你至少会得到传递给你的类,但在这种情况下,它们都是相同的a,所以我不确定你会得到你想要的。

    您可能需要做更多的簿记才能获得所需的信息。

    【讨论】:

    • 这确实是我一直在努力解决的问题。如果您熟悉 Django,我正在尝试为 Model 对象镜像 ModelManagers 的内置功能。不知何故,默认的 ModelManager(“对象”)能够确定从哪个模型调用它,尽管调用都是静态的。即 MyModel.objects.get(id=1)。任何指向 django.db 模块右侧部分的指针都将不胜感激。
    • @sansjoe:我不知道 Django 做了什么,但我知道做这种事情的最简单和最理智的方法应该是创建此类“经理”的每个类实例(可能动态使用使用元类定义的类级属性)。
    • 是的,看起来 Django 创建了许多信号,包括 class_prepared 并手动将默认 ModelManager 添加到任何 Model 类。谢谢大家!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多