设置/获取对象属性的最佳方式

嘿,
我注意到Python鼓励使用:
- -
obj.prop =数据
x = obj.prop
- -
设置/获取对象的属性值.
如果我想在设置/获取属性时运行一些逻辑怎么办?
什么是Python首选方法(使用新功能
'财产')?
我不认为__getAttr__和__setattr__是实用的(我必须
将属性名称编码为其中).
谢谢.

# 回答1


侯赛因B写道:
侯赛因,我认为您不会从问这些抽象中学到太多
问题.在某个时候,您必须弄脏双手并写实际
代码以感觉到语言.
例如,这对您来说将变得很明显,财产效果最好
对于单个属性,而__getAttr __和朋友更方便
如果您想以相同的方式对待多个属性
直到运行时(想委派),名称甚至可能才知道.
彼得
# 回答2


8月24日,上午5:28,Peter Otten <__ Pete ...@web.dewrote:
侯赛因,我认为您不会从问这些抽象中学到太多
问题.在某个时候,您必须弄脏双手并写实际
代码以感觉到语言.
例如,这对您来说将变得很明显,财产效果最好
对于单个属性,而__getAttr __和朋友更方便
如果您想以相同的方式对待多个属性
直到运行时(想委派),名称甚至可能才知道.
彼得
谢谢彼得,
你是对的,我必须尝试触摸python,但问题是我
没有太多时间这样做.
我有一个Java开发人员已有4年以上的时间,我发现事实并非如此
易于消化的Python概念,这就是为什么我要问很多
对您来说很明显,很容易(长时间的酸味主义者).
感谢您的时间.
# 回答3


8月24日,5:07*上午,侯赛因B 侯赛因的答案是,您在Python中都有两个选择.如果没有
显然是更适合您的新应用程序,选择一个然后去.
# 回答4


彼得·奥特(Peter Otten)在阳光下,2008年8月24日12:28:53 +0200,彼得·奥特(Peter Otten)写道:
侯赛因,我认为您不会从问这些抽象中学到太多
问题.在某个时候,您必须弄脏双手并写信
实际代码以感觉到语言.
例如,对您来说,财产有效,这将变得显而易见
最适合个人属性,而__getAttr __和朋友更多
方便如果您想以相同的方式处理多个属性,
直到运行时间才知道其名称的属性(思考
代表团).

我认为您误解了侯赛因的问题.我相信他是
使用"属性"参考我们称之为属性的内容.自然是我
可能是错误的,但这就是我解释他的问题的方式.
我认为他问题的实际答案是财产是
首选的方法是"在设置/获取"属性时"运行一些逻辑",
是,实现Geters和Setter.
侯赛因(Hussein ng
在Python中不是很好的做法,但是如果您需要它们,那就是
正是属性()函数的目的.
- -
史蒂文

# 回答5


8月24日,晚上7:12,史蒂文·d'Aprano cybersource.com.auwrote:
我认为您误解了侯赛因的问题.我相信他是
使用"属性"参考我们称之为属性的内容.自然是我
可能是错误的,但这就是我解释他的问题的方式.
我认为他问题的实际答案是财产是
首选的方法是"在设置/获取"属性时"运行一些逻辑",
是,实现Geters和Setter.
侯赛因(Hussein
在Python中不是很好的做法,但是如果您需要它们,那就是
正是属性()函数的目的.
- -
史蒂文
谢谢史蒂文:)
- -
公共类JCLASS {
私人int答案; // 财产
}
- -
类PyClass(对象):
doc __init __(自我):
self.answer =无
- -
Afaiuy(了解您),它在Java中所谓的财产,是
在Python中称为属性?
为什么Python鼓励直接访问对象的属性?不是
被认为在OOP(封装)中至关重要?
谢谢大家的时间和帮助.
# 回答6


8月25日,4:56*PM,Hussein b 最简单的答案是"因为Python不是Java" :)
说到哪个,您是否阅读了同名的博客文章?它
考虑到您的Java背景:http://dirtsimple.org/2004/12/python-is-not-java.html可能很有用.
一点也不.它们绝对是Java机制的一部分
当然可以提供封装.但是,因为Python提供了
访问属性和属性的一致接口,您
除非您的代码需要它,否则不需要定义属性.我摔倒
您的Getters&Setter正在做的是阅读和写作属性,
那为什么不直接直接进入属性呢?如果您以后需要
在该过程中增加更复杂的性能,您可以轻松创建属性
不必更改任何其他代码如何引用
属性,鉴于它与属性共享相同的接口.
# 回答7


这可能就是您想要的:http://www.python.org/download/relea...ntro/#property
可在Python 2.2或更高版本中提供.
享受,
肯·塞哈特(Ken Seehart)
侯赛因B写道:
# 回答8


Steven d'Aprano a -crit:
(剪)
不一定是"反对精神" - 大部分比__name_mangling
只有在您要保护真正至关重要的时候才真正有用
实施属性 *偶然 *被覆盖,主要是
在其他任何地方烦恼.
这是一种轻描淡写. Java对计算属性有 *不支持 *
因此,您只是可以 *不 *将公共属性变成计算的属性.
事实是,如果他们想能够,他们别无选择
将接口的实现分解.

标签: python

添加新评论