Python 如何从不同的文件继承类?
我有两个文件: 无花果 及 圆圈.py 但我正在尝试加载它们,每当我尝试时,jupyter笔记本会抛出错误: 名称错误:未定义名称“Fig”Python 如何从不同的文件继承类?,python,inheritance,jupyter-notebook,Python,Inheritance,Jupyter Notebook,我有两个文件: 无花果 及 圆圈.py 但我正在尝试加载它们,每当我尝试时,jupyter笔记本会抛出错误: 名称错误:未定义名称“Fig” 我曾尝试在circle.py的beging中使用import fig,但它不起作用,运行这两个文件也不起作用。它们都在同一个目录中。您需要在circle.py中从fig导入fig。另外,请确保在包含circle.py和fig.py的文件夹中存在\uuuu init\uuu.py文件 请同时查看: 好吧,现在还不清楚到底出了什么问题,因为你没有准确地告
我曾尝试在circle.py的beging中使用
import fig
,但它不起作用,运行这两个文件也不起作用。它们都在同一个目录中。您需要在circle.py中从fig导入fig。另外,请确保在包含circle.py和fig.py的文件夹中存在\uuuu init\uuu.py
文件
请同时查看:
- 好吧,现在还不清楚到底出了什么问题,因为你没有准确地告诉我们你在做什么,但我猜是这样的。如果您的
circle.py
文件如下所示
import fig
class Circle(Fig):
def __init__(self, radius):
self.name= "Circle"
self.data= ["Radius: ", radius]
这将中断,因为python不知道在哪里可以找到Fig
。如果你改写
import fig
class Circle(fig.Fig):
def __init__(self, radius):
self.name= "Circle"
self.data= ["Radius: ", radius]
或
一切都会好起来的。这是因为您必须告诉python它可以通过哪个命名空间访问该类(我的第一个解决方案),或者显式导入该类(我的第二个解决方案)。如果要使用PI
,同样的逻辑也适用:
import fig
class Circle(fig.Fig):
def __init__(self, radius):
self.name= "Circle"
self.data= ["Radius: ", radius]
#use PI from fig.py by informing python of namespace
self.circumference = 2.*fig.PI*radius
或
您需要从
circle.py
中的Fig.py
导入类Fig
如果只导入模块fig
,则必须通过相应的命名空间访问类fig
:
class Circle(fig.Fig):
<snip>
类圆(图):
如果要直接使用类名,请使用图导入图中的导入它
from packagename.fig import Fig
class Circle(Fig):
def __init__(self, radius):
self.name = "Circle"
self.data = ["Radius: ", radius]
其中,packagename
是您的实际包名。使用这两个选项继承都有效,但前两行不行。如果运行循环,则未定义PI。如果我同时运行这两个命令,就会得到SyntaxError:无效语法。
import fig
class Circle(fig.Fig):
def __init__(self, radius):
self.name= "Circle"
self.data= ["Radius: ", radius]
#use PI from fig.py by informing python of namespace
self.circumference = 2.*fig.PI*radius
from fig import Fig, PI
class Circle(fig):
def __init__(self, radius):
self.name= "Circle"
self.data= ["Radius: ", radius]
#PI is now explicitly imported so don't need namespace
self.circumference = 2.*PI*radius
class Circle(fig.Fig):
<snip>
from packagename.fig import Fig
class Circle(Fig):
def __init__(self, radius):
self.name = "Circle"
self.data = ["Radius: ", radius]