从另一个 python 文件中获取变量。无属性错误
Posted
技术标签:
【中文标题】从另一个 python 文件中获取变量。无属性错误【英文标题】:Getting variables from another python file. No attribute error 【发布时间】:2018-07-16 00:08:29 【问题描述】:我正在尝试为我的 Python 项目设置一个变量文件。 我有一个运行良好的函数:
def resize_window(self):
size_object = QDesktopWidget().screenGeometry(-1) # active screen
screen_width = size_object.width()
screen_height = size_object.height()
但是,当我尝试将其设置在单独的文件中以进行调用时,出现错误。
AttributeError: type object 'ScreenSize' 没有属性 'screen_width'
这是我的单独文件的外观:
class ScreenSize(object):
def __init__(self, screen_width, screen_height):
self.screen_width = screen_width
self.screen_height = screen_height
self.resize_window()
def resize_window(self):
size_object = QDesktopWidget().screenGeometry(-1) # active screen
screen_width = size_object.width()
screen_height = size_object.height()
电话:
self.frame_top.setMinimumSize(QtCore.QSize(3/4* ScreenSize.screen_width, 1/10*ScreenSize.screen_height))
self.frame_top.setMaximumSize(QtCore.QSize(3/4*ScreenSize.screen_width, 1/10*ScreenSize.screen_height))
错误是:AttributeError: type object 'ScreenSize' has no attribute 'screen_width'
如果我只用这个设置课程:
class ScreenSize(object):
screen_width = 500
screen_height = 300
它有效。所以我的问题是从类中调用该函数。 提前感谢您的帮助。
【问题讨论】:
缩进看起来不正确,令人困惑。 一个类与该类的实例不同。您在实例self
上设置属性,所以ScreenSize
类当然没有它们。那就是您做错了,但是问题中没有足够的信息来告诉您如何正确地做。您实际上不必为了分隔文件而将内容放入类中。
尝试使用self.screen_width
。将self.
用于class
的所有变量。
【参考方案1】:
当你将你的类声明为
class ScreenSize(object):
screen_width = 500
screen_height = 300
变量属于类而不是类的实例。从这个意义上说,在这个类中包含函数等同于根本不将变量或函数包装在一个类中,因为 Python 中的脚本本质上只是一个类。
如果你想创建你的设置类的实例,你需要在你的类中声明的函数调用中使用self
,然后创建该类的一个实例来检索值而不是类本身:
class ScreenSize(object):
def __init__(self, screen_width, screen_height):
self.screen_width = screen_width
self.screen_height = screen_height
self.resize_window()
def resize_window(self):
size_object = QDesktopWidget().screenGeometry(-1) # active screen
self.screen_width = size_object.width()
self.screen_height = size_object.height()
screen_size = ScreenSize()
查看Python Classes 了解有关如何实现类的更多信息。
此外,正如 @gilch 在 cmets 中所指出的,如果您只想要它们的一个实例,则这些值不需要在一个类中:
# settings.py
screen_width = 500
screen_height = 300
def resize_window(self):
size_object = QDesktopWidget().screenGeometry(-1) # active screen
screen_width = size_object.width()
screen_height = size_object.height()
假设 settings.py
与 main 位于同一目录中:
# main.py
import settings
print(settings.screen_width)
settings.resize_window()
【讨论】:
感谢您的建议。我真的很喜欢 settings.py 的方法。它完全实现了我所追求的。但是,当我运行它时,它返回 500 的 screen_width (初始设置),但我期望从 size_object 检索到的实际屏幕宽度在 1000 左右。我错过了什么? 嗨,如果您对这个答案感到满意,您能否将其标记为这样以结束此问题。谢谢!【参考方案2】:根据建议,我通过创建单独的 .py 文件来实现它
def screen_width(self):
size_object = PyQt5.QtWidgets.QDesktopWidget().screenGeometry(-1) # active screen
scr_width = size_object.width()
return scr_width
感谢您为我指明正确的方向。
【讨论】:
以上是关于从另一个 python 文件中获取变量。无属性错误的主要内容,如果未能解决你的问题,请参考以下文章