N***e 发帖数: 61 | 1 01 class Test1:
02 def __init__(self, x):
03 self.x=x
04 @property
05 def x(self):
06 return self.__x
07 @x.setter
08 def x(self, x):
09 self.__x=x
10 t=Test1(10)
11 t.__x=20
12 print(t.x)
13 print(t.__x)
14
15 class Test2:
16 def __init__(self, x):
17 self.__x=x
18 @property
19 def x(self):
20 return self.__x
21 @x.setter
22 def x(self, x):
23 self.__x=x
24 t=Test2(10)
25 t.__x=20
26 print(t.x)
27 print(t.__x)
输出结果为:
10
20
10
20
为什么不是:
20
20
20
20
?
如果我理解正确的话,第3行 self.x=x因该是call了setter x(self, x), 而不是直接
建立了一个variable x。 | N***e 发帖数: 61 | 2 好吧,问题解决了。不因该用double underscore。
但是还是不明白为什么用了dunder结果回事10,20,10,20 | N***e 发帖数: 61 | 3 我就是为了测试name mangling。但是现在明白鸟。
Python只mangle class definition中的 dunder variable name,之外的就直接当作
variable name了。
在document里面招到了原话:
This mangling is done without regard to the syntactic position of the
identifier, as long as it occurs within the definition of a class. | m*****n 发帖数: 3575 | |
|