【问题标题】:Python: How to access property from another file ? from file name import class didn't workPython:如何从另一个文件访问属性?从文件名导入类不起作用
【发布时间】:2020-07-21 07:10:08
【问题描述】:

我是 Python 编程新手。我的属性由文件 A 中的一个类中的 getter 和 setter 组成。

class Histogram:
    def getHue(self):
        return self.value

    def setHue(self, value):
        self.varHueHist = value

    HueHist = property(getHue, setHue)

我想从另一个文件B中的另一个类访问该属性。但是在我导入文件A和文件B中的类后,仍然无法访问该属性。

from Histogram import Histogram

class moment:
   var = Histogram()

无法访问该属性。当我尝试在我的 Spyder 中使用自动完成(Ctrl+空格)时,该属性也没有显示。不幸的是,当我尝试使用该属性访问同一文件中的类内的属性时,该属性是可读的。 如何从另一个文件的类内部调用属性?

这两个文件已经在同一个文件夹中。 请帮忙。谢谢

【问题讨论】:

  • 第二个例子中的第一次导入似乎是错误的;请检查,我是否调整了缩进匹配你所拥有的。
  • @guidot 抱歉,这是我写这个问题时的错误。但是在代码中,我使用的是刚才编辑的答案。我的代码使用from filename import class_name
  • 您应该注意,您的property 完全没有意义。您应该只使用常规属性,因为您的 getter 和 setter 什么都不做。
  • 无论如何,“无法访问该属性。”您完全尝试了什么,完全怎么没用?始终提供minimal reproducible example 和任何错误消息或不正确行为的完整描述(包括预期行为的完整描述。
  • @juanpa.arrivillaga 我想在另一个文件的另一个类中制作一个新的直方图,并使用仅使用色调的直方图。所以我制作了property Hue,它将获得用于制作直方图的 Bin 数量。所以当我从另一个类调用它时,它会是这样的,首先我创建实例类并将其存储在一个变量中:CandidateHistogram = Histogram(),然后我调用该属性来制作这样的直方图:CandidateHistogram.HueHist(20)。我想通过调用这样的语句来创建直方图。

标签: python python-3.x oop


【解决方案1】:

您尝试做的是使用描述符来实现。你可以在这里看到更多:

https://docs.python.org/3/howto/descriptor.html

所以你的代码应该是这样的:

class Histogram:
 
  def __set_name__(self, owner, name):
     self.public_name = name
     self.private_name = '_' + name

  def __get__(self, obj, objtype=None):
     return getattr(obj, self.private_name)

  def __set__(self, obj, value):
     setattr(obj, self.private_name, value)

现在你可以调用它了,它将作为描述符设置并得到相应的处理。

import Histogram

class Moment:
    var = Histogram()

此外,位于同一文件夹中的文件并不意味着导入将起作用。您应该在文件夹内创建一个 init.py 空文件,然后执行

from folder.file import class_name

或者你可以将文件夹添加到路径中:

import sys
sys.path.extend(['complete_path_to_the_folder_where_code_is'])

【讨论】:

    【解决方案2】:

    我不是专业人士,但我想你的问题在这里得到了回答

    Importing class from another file

    Importing files from different folder

    【讨论】:

    • 感谢您的参与。我们一起学习 :) 这两个文件已经在同一个文件夹中
    • 抱歉造成误会
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2019-02-21
    相关资源
    最近更新 更多