假设我的模块是myclass.py,这里是代码:
#!/usr/bin/env python
# coding=utf-8
class A(object):
b = B()
def __init__(self):
pass
class B(object):
pass
Run Code Online (Sandbox Code Playgroud)
并导入它
In [1]: import myclass
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-e891426834ac> in <module>()
----> 1 import myclass
/home/python/myclass.py in <module>()
2 # coding=utf-8
3
----> 4 class A(object):
5 b = B()
6 def __init__(self):
/home/python/myclass.py in A()
3
4 class A(object):
----> 5 b = B()
6 def __init__(self):
7 pass
NameError: name 'B' is not defined
Run Code Online (Sandbox Code Playgroud)
我知道如果我在类A上面定义类B,那就没问题,没有错误.但是,我不想这样做,有没有其他方法可以解决这个问题.我知道在C中有功能声明.谢谢!
类定义是一个声明.当语句AA执行时,的声明BB尚未执行.因此,没有课程B,你得到NameError: name 'B' is not defined
class A(object):
b = B() # <== AA
def __init__(self):
pass
class B(object): # <== BB
pass
Run Code Online (Sandbox Code Playgroud)
要解决这个问题:
您可以更改类的顺序:
class B(object):
pass
class A(object):
b = B()
def __init__(self):
pass
Run Code Online (Sandbox Code Playgroud)
您可以将其使用类的语句B来classmethod和类的定义之后调用它B:
class A(object):
@classmethod
def init(cls):
cls.b = B()
def __init__(self):
pass
class B(object):
pass
A.init()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |