1
17
伊恩,这基本上是一个术语问题,尽管与这个问题相关联的“语言不可知论”标签非常与语言/环境相关。 为了便于设计讨论,属性和实例变量可以互换使用,因为其思想是属性是描述对象的数据项。 当谈论一种特定的语言时,这两种语言可能是不同的。例如,在C中,属性实际上是返回对象的函数,而实例变量是类的非静态成员变量。 |
2
3
Hershi认为这是语言特有的。但要添加到语言特定答案的跟踪中: 在Python中,实例变量是实例的一个属性,(通常)实例字典中引用的属性。这与爪哇中的成员或实例变量类似,只是所有的内容都是公开的。 属性是指向getter/setter方法的快捷方式, 看起来就像一个实例变量 . 因此,在下面的类定义中(从guido的 new style object manifesto ):
所有这些都是一个很长的答案,可以说在设计级别,谈论属性是很好的。对于您可能需要执行哪种类型的封装,这是不可知的。我想这个原则不是语言不可知论,而是适用于Python旁边的语言。 |
3
2
在C中完成的代码示例#
|
4
2
在目标C中,属性是一个实例变量,它可以利用重载的点运算符来调用其setter和getter。所以my.food=“Cheesburger”实际上被解释为[我的setfood:“Cheesburger”]。这是另一种情况,因为objective-c定义了@property关键字,所以定义绝对不是语言无关的。 |
5
1
也许是因为你最初来自C++,对吧?! 在我上学的时候,我有很多教授一直在说班级财产或班级财产。自从我搬到爪哇C世界,我就开始听有关成员的事了。类成员、实例成员… 然后属性apear!在Java和.NET中。所以我认为你最好叫它成员。无论它们是实例成员(或您称之为实例变量)还是类成员… 干杯! |
6
1
一个属性可以返回一个实例变量,我认为大多数情况下都可以,但它可以做得更多。您可以将逻辑放入属性、聚合值或更新其他实例变量等。不过,我认为最好避免这样做。逻辑应该进入方法。 |
7
0
在爪哇,我们有一种叫做 JavaBeans Properties ,但这基本上是一个实例变量,它遵循其getter和setter的特定命名模式。 |
8
0
在加上前面所说的,在C这样的语言中,属性本质上是一个get-and-set函数。因此,除了获取/设置之外,它还可以有运行的自定义逻辑。实例变量不能这样做。 |
9
0
属性是与对象关联的某种数据。例如,圆的一个属性是它的直径,另一个属性是它的面积。 实例变量是存储在对象中的一段数据。它不需要直接与属性对应。例如(heh),圆可以将其半径存储在实例变量中,并根据该半径计算其直径和面积。这三个都是属性,但只有半径存储在实例变量中。
有些语言有“第一类”属性的概念。这意味着对于客户机应用程序,属性看起来和使用起来就像一个实例变量。也就是说,不是写
|
10
0
与给出的其他答案相比,我 做 认为成员变量和语言不可知的属性之间有一个有用的区别。 这种区别在面向组件的编程中最明显,它在任何地方都很有用,但在图形用户界面中最容易理解。在这种情况下,我倾向于认为组件的设计时配置是操作对象的“属性”。例如,我通过设置文本输入字段的属性来选择其前景和背景颜色、边框样式和字体。而这些属性 能够 在运行时进行更改,通常不会。在运行时,表示字段内容的另一组变量更有可能被读取和写入。我认为这个信息是组件的“状态”。 为什么这种区别有用?当为连接组件创建抽象时,通常只需要暴露“状态”变量。回到文本字段示例,您可以声明一个提供对当前内容访问的接口。但是控制组件外观的“属性”只在具体的实现类上定义。 |
pr0p · 与实例变量使用相关的Python OOP 7 年前 |
tableguarder · 如何使我的类属性不能直接访问实例变量? 7 年前 |
olivier57 · 来自同一实例的字段保留值 7 年前 |
Hash Doe · 为什么类变量可以通过类实例访问?[副本] 7 年前 |
jbk · 在设置这些实例变量时,我做错了什么? 7 年前 |
hhprogram · Python实例变量的类型提示约定 7 年前 |
user4252294 · 设置未初始化实例变量 10 年前 |