【问题标题】:property decorator initialization in pythonpython中的属性装饰器初始化
【发布时间】:2013-03-17 19:12:54
【问题描述】:

我想知道是否有人知道使用 @property 和常规属性是否有任何细微差别?

在 python 中使用@property 装饰器时,属性初始化是否会出现任何问题? 我的理解是,这个装饰器允许在每次调用它时由函数计算一个属性,因为它是一个依赖于其他可变属性的属性。 我已经写了一些@property 装饰器,但由于某种原因它们没有工作。 我收到这种形式的错误:

for key in temp_spectra.overall_properties_dictionary:

AttributeError: 'Spectra' object has no attribute 'overall_properties_dictionary'

据我了解,创建这些@propertys 的正确方法是这样的:

from PyQt4 import QtCore, QtGui
class someObject(QtCore.QObject):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    @property
    def some_other_property(self):
        # some complicated function which will recalculate everytime it is called
        # because the other properties may be mutable
        p = self.x + self.y
        return p
class otherObject(QtGui.QTabWidget):
    def __init__(self, someObject):
        print someObject.some_other_property

otherObject(someObject(1,5))

但是,这行得通!所以我不确定我的代码的哪一部分可能导致这种情况。
值得一提的是,我正在将我的代码转换为使用multiprocessing。这会导致问题吗?我只是不明白初始化可能出现什么问题导致这种类型的错误。

编辑:我按照建议更改了代码以匹配新样式类。*

【问题讨论】:

  • @property 属性不规则。

标签: python properties decorator dependency-properties


【解决方案1】:

值得注意的一点是,属性只支持新样式的类,而你的不支持。

改变

class someObject:

class someObject(object):

【讨论】:

  • 哦,我没有意识到有新旧样式类之类的东西。但是,我的主程序确实具有继承性。抛出错误说它没有属性的对象是QtCore.QObject 对象,而聚合和调用该对象的对象是QtGui.QTabWidget 对象。
  • 我更改了代码,但在该示例中仍然有效,但在我的主程序中仍然无效。新式/旧式类的区别真的会导致属性出现问题吗?
  • @chase:可以。至于你的主要问题,我不确定。
  • 好的,谢谢。我将继续寻找可能导致初始化问题的任何其他细微差异。
猜你喜欢
  • 2011-03-15
  • 2018-05-04
  • 2023-04-08
  • 1970-01-01
  • 2014-03-15
  • 2018-07-06
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
相关资源
最近更新 更多