Python - 从其他内部 class 引用内部 class
Python - reference inner class from other inner class
我正在尝试从另一个内部 class 引用内部 class。我都试过了:
class Foo(object):
class A(object):
pass
class B(object):
other = A
和
class Foo(object):
class A(object):
pass
class B(object):
other = Foo.A
各自的结果:
Traceback (most recent call last):
File "python", line 1, in <module>
File "python", line 6, in Foo
File "python", line 7, in B
NameError: name 'A' is not defined
和
Traceback (most recent call last):
File "python", line 1, in <module>
File "python", line 6, in Foo
File "python", line 7, in B
NameError: name 'Foo' is not defined
这可能吗?
这是不可能的,因为您在 class 中定义的所有内容仅在该 class 的实例中成为有效成员,除非您使用 @staticmethod
定义方法,但是class.
没有这样的 属性
所以,这也行不通:
class Foo(object):
x = 10
class A(object):
pass
class B(object):
other = x
这 将 工作,但这不是您想要的:
class Foo(object):
x = 10
class A(object):
pass
class B(object):
def __init__(self):
self.other = Foo.A
f = Foo()
print(f.B().other)
输出为:
<class '__main__.Foo.A'>
之所以有效,是因为方法(在本例中为 __init__
)在创建对象时被评估,而 __init__
之前的赋值被评估,而 class 是阅读和解释。
您只需在自己的模块中定义所有 classes 即可获得几乎相同的东西。导入模块,使其成为一个对象,其字段是您在其中定义的 classes。
我认为这不是很好的面向对象实践,但您可以在外部 class 范围内设置内部 class 属性。例如.
class Class2:
class Labels:
c2l1 = 'label 1'
c2l2 = 'label 2'
class Params:
pass
# p1 = None
# p2 = None
# p3 = None
Params.p1 = Labels.c2l2
Params.p2 = 1234
print(Class2.Params.p1)
print(Class2.Params.p2)
# print(Class2.Params.p3)
label 2
1234
这些都是 class 属性,但实例属性的工作方式应该类似。
我正在尝试从另一个内部 class 引用内部 class。我都试过了:
class Foo(object):
class A(object):
pass
class B(object):
other = A
和
class Foo(object):
class A(object):
pass
class B(object):
other = Foo.A
各自的结果:
Traceback (most recent call last):
File "python", line 1, in <module>
File "python", line 6, in Foo
File "python", line 7, in B
NameError: name 'A' is not defined
和
Traceback (most recent call last):
File "python", line 1, in <module>
File "python", line 6, in Foo
File "python", line 7, in B
NameError: name 'Foo' is not defined
这可能吗?
这是不可能的,因为您在 class 中定义的所有内容仅在该 class 的实例中成为有效成员,除非您使用 @staticmethod
定义方法,但是class.
所以,这也行不通:
class Foo(object):
x = 10
class A(object):
pass
class B(object):
other = x
这 将 工作,但这不是您想要的:
class Foo(object):
x = 10
class A(object):
pass
class B(object):
def __init__(self):
self.other = Foo.A
f = Foo()
print(f.B().other)
输出为:
<class '__main__.Foo.A'>
之所以有效,是因为方法(在本例中为 __init__
)在创建对象时被评估,而 __init__
之前的赋值被评估,而 class 是阅读和解释。
您只需在自己的模块中定义所有 classes 即可获得几乎相同的东西。导入模块,使其成为一个对象,其字段是您在其中定义的 classes。
我认为这不是很好的面向对象实践,但您可以在外部 class 范围内设置内部 class 属性。例如.
class Class2:
class Labels:
c2l1 = 'label 1'
c2l2 = 'label 2'
class Params:
pass
# p1 = None
# p2 = None
# p3 = None
Params.p1 = Labels.c2l2
Params.p2 = 1234
print(Class2.Params.p1)
print(Class2.Params.p2)
# print(Class2.Params.p3)
label 2
1234
这些都是 class 属性,但实例属性的工作方式应该类似。