自定义python包中的对象范围
Posted
技术标签:
【中文标题】自定义python包中的对象范围【英文标题】:Scope of object in custom python package 【发布时间】:2022-01-22 09:02:49 【问题描述】:我正在尝试制作 2d 图形包。我已经做了很多尝试来找到最好的结构,但我不能让它很好地工作。这是当前不工作的设置:
我有文件
init.py
、scene.py
和 polygon.py
scene.py
应该初始化一个对象,该对象有一个数组,其中假设存储了多边形。此文件的简单版本如下所示:
class make_scene:
def __init__(self,width,height,**kwargs):
self.width = width
self.height = height
self.color = kwargs.get('color', '#ffffff')
self.draw_elements = []
#init scene:
the_scene = make_scene(500, 250)
polygon.py
定义了一些要绘制的对象(圆形、立方体等):
class cube:
def __init__(self,x,y,**kwargs):
self.x = x
self.y = y
self.color = kwargs.get('color', '#000000')
the_scene.append(self)
init.py
只是导入模块和一些辅助包:
from .scene import *
from .polygon import *
但是,如果我尝试使用这个包,scene_file 的范围不正确:
cube(0,0,10,10)
>>> NameError: name 'the_scene' is not defined
我被多种不同的架构困住了。如果我将它保存在一个看起来并不理想的文件中,我可以让它工作。
想解决这个问题还是尝试不同的架构?我会喜欢你的意见。
【问题讨论】:
什么是package
?您没有显示任何可以导入的具有该名称的内容。为了保持理智,请避免导入通配符。
谢谢@mkrieger1 我只是指定义包的 3 个文件,但我觉得这很混乱,所以我编辑了问题
【参考方案1】:
问题似乎是您的 polygon.py 文件不知道 the_scene
对象。 Python 不会在像 init.py 这样的公共文件中将两者链接在一起。
尝试从您的 polygon.py 文件中导入 the_scene
函数,例如
from .polygon import the_scene
【讨论】:
以上是关于自定义python包中的对象范围的主要内容,如果未能解决你的问题,请参考以下文章