python中的可写属性

时间:2015-09-10 19:51:37

标签: class python-2.7

1. class Mine:
2.    def fun1(self,x):
3.        self.x=x
4.        print "Inside fun1",self.x

5.    def fun2(self):
6.        print "Inside fun2 :",self.x
7.
8.  obj1 = Mine()
9.  obj1.fun1(1)
10. obj1.fun2()

11. obj2 = Mine()
12. obj2.fun1(10000)
13. obj2.fun2()

14. del obj1.x
15. #obj1.fun2()
16. obj2.fun2()

17. Mine.a=111
18. obj3=Mine()
19. print "Mine.a: ",Mine.a
20. print "obj1.a: ",obj1.a
21. print "obj2.a: ",obj2.a
22. print "obj2.a: ",obj3.a

23. obj2.c=222
24. #print "\nMine.c: ",Mine.c
25. #print "obj1.c: ",obj1.c
26. print "obj2.c: ",obj2.c
27. #print "obj2.c: ",obj3.c

有人可以帮我理解第17和23号线的情况,以及为什么第19,20,21,22行的代码工作正常,第24,25,27行的代码出错?

先谢谢。

1 个答案:

答案 0 :(得分:1)

17. Mine.a=111

您要向班级a添加新的静态成员Mine。 python的工作方式(其他面向对象的语言不这样做)你可以访问a,就像它是一个普通的实例属性;即m = Mine(); print m.a现在将与print Mine.a一样工作。

静态成员通常添加在类定义的主体中:

class Mine:
    a = 111

你的第二个问题:

23. obj2.c=222

这只会向当前实例obj2添加一个新成员。 Mine或其他Mine本身的其他内容都不了解c