当我将“数据”变量设为类变量时,以下工作有效,但是当我将其变为对象变量时,则不会调用描述符。请帮忙。
class Data(object):
products = {
'milk': {'price': 1.50, 'quantity': 10},
'eggs': {'price': 0.20, 'quantity': 100},
'cheese': {'price': 2.00, 'quantity': 10}
}
def __get__(self, obj, klas):
print "Here in descriptor"
return self.products
class BusinessLogic(object):
def __init__(self): # When I remove these 2 lines
self.data = Data()
#data = Data() # and enable this line it does work !
def main():
b = BusinessLogic()
b.data
if __name__ == '__main__':
main()
这是因为描述符仅应定义为类属性,而不是实例属性:
从文档:
以下方法仅在包含该方法的类的实例(所谓的描述符类)出现在所有者类中( 描述符必须位于所有者的类字典或父类的父类的类字典中 )时适用。
为了使描述符也能与实例属性一起使用,您需要重写。__getattribute__
方法BusinessLogic
(尚未进行全面测试,但可以根据情况工作):
def __getattribute__(self, attr):
obj = object.__getattribute__(self, attr)
if hasattr(obj, '__get__'):
return obj.__get__(self, type(self))
return obj
如果您有数据描述符,则还需要处理该__setattr__
零件。
def __setattr__(self, attr, val):
try:
obj = object.__getattribute__(self, attr)
except AttributeError:
# This will be raised if we are setting the attribute for the first time
# i.e inside `__init__` in your case.
object.__setattr__(self, attr, val)
else:
if hasattr(obj, '__set__'):
obj.__set__(self, val)
else:
object.__setattr__(self, attr, val)
问题内容: 描述符对象需要存在于类中,而不是存在于实例中 因为那是实现的方式。 一个简单的例子。考虑一个描述符: 考虑每个obj具有多个Prop的情况:我将需要使用唯一的名称来标识值和乘数(如此处。具有每个实例的描述符对象将允许将(和)存储在描述符本身中,从而简化了几样东西。 我知道以前也曾提出过类似的问题,但我没有找到真正的解释: 为什么以这种方式设计Python? 建议使用哪种方式存储描述符需
ReferenceError:未定义测试 我被困在这里了。我该如何解决这个问题。还有一个问题。消化和摩卡有关系吗?请谁来帮我解决这个问题
问题内容: 我正在尝试定义一些端点并使用进行测试。在我有: 并在: 现在,我正在尝试使用此端点: 但是,当我运行时,出现此错误: 我该如何解决该问题? 问题答案: 假设您通过进行测试,则必须使用命令而不是可执行文件运行测试。 因此,如果您还没有这样做,请确保您已这样做。然后,只需在项目的根目录中运行即可。
我得到以下错误时运行我的测试用例摩卡 有人知道为什么会这样吗? 包裹json physicalperson.spec.js 我所尝试的 我在SO中看到了一些线程,我也尝试了下面的代码,但出现了相同的错误。
本文向大家介绍Windows Powershell属性:描述对象是什么,包括了Windows Powershell属性:描述对象是什么的使用技巧和注意事项,需要的朋友参考一下 属性可以描述一个对象,对象的属性可以被Powershell自动转换成文本,并且输出到控制台。因此可以通过这种方法查看任何对象,例如$host: InternalHost对象存储在$host变量中,包含9个属性。输出的第一列为
问题内容: 因此,我使用的所有自定义数据属性都应以“ data-”开头: 如果我不理会这会发生什么不好的事情?即: 我想一件坏事是我的自定义属性可能与具有特殊含义(例如)的HTML属性发生冲突,但是除此之外,仅编写“ example_text”而不是“data-example_text”是否有问题?(它不会验证,但是谁在乎呢?) 问题答案: 保留自定义属性以data- *为前缀有几个好处。 它保证