我是使用属性的新手,因此我进行了如下所示的简单测试。在测试中,我创建了两个类“ Test1”和“
Test2”,每个类都持有一个值。我正在尝试使用属性来控制对伪隐藏的“ val”属性的访问。当前测试不限制“
val”属性的任何输入或输出,因为该程序仅是概念证明。下面显示的两个测试类产生相同的结果,并被认为代表了构造属性的不同方法。我要引用的属性的示例使用在python
docs上找到。
根据文档:
如果c是C的实例,则cx将调用getter,cx = value将调用setter,而del cx是删除器。
其中C是他们的测试班级。我认为通过按我的方式设置值可以更改_val并将val保留为属性。但是在我看来,5
除非我弄错了,否则我访问属性设置器的方法实际上是用整数替换属性。我希望有人可以澄清我的困惑。
class Test1:
def __init__(self):
self._val = 0
def setVal(self,newVal):
self._val = newVal
val = property(lambda self: self._val, setVal, None, "Property for value")
def __str__(self):
return "Value: {}".format(self.val)
class Test2:
def __init__(self):
self._val = 0
@property
def val(self):
return self._val
@val.setter
def setVal(self,newVal):
self._val = newVal
def __str__(self):
return "Value: {}".format(self.val)
def verify(a):
print("\nCheck with {}".format(a.__class__.__name__))
print("Value check:",a.val)
a.val = 5
print("Value after a.val = 5 is:",a.val)
print("The actual value is:",a._val)
def main():
verify(Test1())
verify(Test2())
if __name__ == '__main__':
main()
从文档:
property([fget[, fset[, fdel[, doc]]]])
返回 新样式类 (从对象派生的 类) 的属性属性。
描述符仅为新样式对象或类调用。您使用的是老式类。从基本类型继承object
:
class Test1(object):
# your code
class Test2(object):
def __init__(self):
self._val = 0
@property
def val(self):
return self._val
@val.setter
def val(self,newVal): # should be named as property
self._val = newVal
def __str__(self):
return "Value: {}".format(self.val)
这项工作很好:
>>> verify(Test1())
Check with Test1
('Value check:', 0)
('Value after a.val = 5 is:', 5)
('The actual value is:', 5)
阅读有关新型类和经典类之间的区别的更多信息。
在ORM映射类上定义具有“混合”行为的属性。 “混合”是指属性在类级别和实例级别定义了不同的行为。 这个 hybrid 扩展提供了一种特殊形式的方法修饰器,大约有50行代码,几乎不依赖于其他的sqlacalchemy。理论上,它可以与任何基于描述符的表达式系统一起工作。 考虑映射 Interval ,表示整数 start 和 end 价值观。我们可以在生成类级SQL表达式的映射类上定义更高级别的函
我有一个具有登录功能的控制器类。当我输入用户名和密码并按submit时,它将调用此控制器并在会话中存储客户信息。但有一件事让我感到困惑,那就是@model属性 我将使用@ModelAttribute Customer存储我输入的用户名和密码,并使用Customer c存储我从customService获得的所有信息,并将其存储到会话中。但是会话存储的是客户。 如果我这样改变论点。它工作正常
问题内容: 是HTML的属性吗? 我应该做还是 我读了很多文章,但仍然感到困惑。 有人可以向我解释一下HTML / JS中的属性与属性之间的区别是非常简单的吗? 问题答案: 属性由HTML定义。属性(在DOM元素上)由DOM(以及HTML 5定义,模糊了标记和DOM之间的边界)。 一些HTML属性具有1:1映射到属性。就是这样的一个例子。 有时名称是不同的。该属性映射到该属性,该属性映射到该属性(
在Spring Boot Web应用程序中,我在Application.properties中有以下日志记录属性。 事情很顺利--内部Spring Boot和应用程序的调试消息都被记录到logs/spring-boot-logging.log中。但是,即使我添加了具有不同日志级别的log4j2-spring.xml,仍然会选择application.properties的级别。
问题内容: 显示属性和可见性属性之间有何区别? 问题答案: 该属性仅告诉浏览器是否显示元素。它是可见的(-您可以看到)或不可见的(-您看不到)。 该属性告诉浏览器 如何 绘制和显示元素(如果有的话)-是将其显示为元素(即,与文本和其他内联元素一起流动)还是-level元素(即,具有height和width属性,你可以设置,它的浮动等),或(即它的作用就像一个黑匣子,但奠定了直列代替)和其他一些人(
来自topcoder的一篇文章: “在BFS中,我们在将顶点推入队列时标记访问的顶点,而不是在DFS中弹出顶点时标记访问的顶点。” 注意:这是在使用显式堆栈(伪dfs)实现dfs时说的。 我的问题是为什么会这样?为什么我们不能在从队列弹出后标记访问的顶点,而在bfs的情况下推到队列上?