Pao*_*sco 6 python introspection inner-classes
假设你有一个python方法,它将类型作为参数; 是否可以确定给定的类型是否是嵌套类?
例如,在这个例子中:
def show_type_info(t):
print t.__name__
# print outer class name (if any) ...
class SomeClass:
pass
class OuterClass:
class InnerClass:
pass
show_type_info(SomeClass)
show_type_info(OuterClass.InnerClass)
Run Code Online (Sandbox Code Playgroud)
我想要调用以show_type_info(OuterClass.InnerClass)显示InnerClass是在OuterClass中定义的.
内部类在Python中没有特殊的特性.它只是类对象的属性,与整数或字符串属性没有区别.您的OuterClass/InnerClass示例可以完全重写为:
class OuterClass(): pass
class InnerClass(): pass
OuterClass.InnerClass= InnerClass
Run Code Online (Sandbox Code Playgroud)
InnerClass无法知道它是否在另一个类中声明,因为它只是一个普通的变量绑定.使绑定方法了解其拥有者"自我"的魔力在这里不适用.
John发布的链接中的内部类装饰魔术是一种有趣的方法,但我不会按原样使用它.它不会缓存为每个外部对象创建的类,因此每次调用outerinstance.InnerClass时都会得到一个新的InnerClass:
>>> o= OuterClass()
>>> i= o.InnerClass()
>>> isinstance(i, o.InnerClass)
False # huh?
>>> o.InnerClass is o.InnerClass
False # oh, whoops...
Run Code Online (Sandbox Code Playgroud)
此外,它尝试复制使用getattr/setattr在内部类上使外部类变量可用的Java行为的方式非常狡猾,并且实际上是不必要的(因为更多Pythonic方式将显式地调用i .__ outer __.attr).
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |