理解Python中的属性、语法和功能
我使用的是Python2.7,我创建了一个类,其中包含一些属性。我用一些值输入在类外实例化一个对象。班级:理解Python中的属性、语法和功能,python,python-2.7,class,properties,Python,Python 2.7,Class,Properties,我使用的是Python2.7,我创建了一个类,其中包含一些属性。我用一些值输入在类外实例化一个对象。班级: class Prop(object): def __init__(self, data): self.A = data 和getter/setter: @property def A(self): return self._A @A.setter def A(self, data): self._A = data 以上方法很好。在我的主脚本中,
class Prop(object):
def __init__(self, data):
self.A = data
和getter/setter:
@property
def A(self):
return self._A
@A.setter
def A(self, data):
self._A = data
以上方法很好。在我的主脚本中,我正在实例化:
prop_demo = Prop('some text')
然而,如果我在\uuu init\uuuuuu
内部用self.\u A=data
更改self.A=data
,那么A
不会通过setter,那么我认为它错过了拥有setter的一点。我更改了它,因为对我来说,对内部类变量使用\uu
似乎更直观,而对我来说,执行self.A=data
似乎是该类的实例应该做的事情(在类之外,在我的主脚本中)
我有两个问题:
self.A
而不是self.\u A
?也许我遗漏了一些关于python类变量的重要性的信息因为属性是
A
,而不是\u A
。注意,对于这样的情况,您根本不应该使用属性,而应该使用普通属性。你的二传手/接球手什么都不做,所以他们是完全不必要的。在任何情况下,如果要使用一个属性,那么应该在类中使用该属性,这就是封装的全部要点(除非出于某种原因,例如性能…,您想要破坏封装)。但是,简单地说,属性是.A
,而不是\u A
。这是两件不同的事情。@juanpa.arrivillaga为了简单地解释我的担忧,我特意将setter函数简化为“不做任何事情”。当然,我的属性是A,这就是我在类init范围之外访问它的方式。但是为什么不在类范围内使用
.A
不是。\u A
的方式与相同。foo
不是.bar
。唯一的区别是前导下划线这一事实并不重要,对于语言本身来说,它们是两个不同的属性。您的财产是.A
。它与\u A
完全不同,后者只是一个普通属性,您在.A
中使用它,但它既不在这里也不在那里。使用\ux
而不是\ua
也许这会让事情变得更清楚?