从C#到Python —— 4 类及面向对象
2010-09-30 22:41:42 来源:WEB开发网核心提示: 1classA:2y=23printA.y4#输出2与C#不同的是,Python中对象可以直接访问类的静态成员,从C#到Python —— 4 类及面向对象(3),例如:1classA:2y=23a=A()4printa.y5#输出2但对象不能为类的静态成员赋值,例如:1classA:2y=23
1 class A:
2 y = 2
3 print A.y
4 #输出2
与C#不同的是,Python中对象可以直接访问类的静态成员,例如:
1 class A:
2 y = 2
3 a = A()
4 print a.y
5 #输出2
但对象不能为类的静态成员赋值,例如:
1 class A:
2 y = 2
3 a = A()
4 a.y = 3
5 print a.y
6 print A.y
7 #输出3 2
事实上赋值语句a.y = 3相当于为实例a添加了一个非静态成员y,而类A的静态成员A.y没有发生改变(即使同名也不会冲突,因为它们不在同一个命名空间内)。 可以直接用A.y = 3为类变量赋值,这点与C#是一致的。
4.2.4 私有成员
在编写C#程序时,我们可以对类的成员使用不同的访问修饰符定义它们的访问级别。例如对于公有成员可以使用修饰符public,而对于私有成员(仅限于类中的成员可以访问)则使用修饰符private,此外C#还提供了保护成员(protected修饰)和内部成员(internal修饰)等。
但在Python中所有的成员都是公有成员,你可以不受限制地访问它们(变量和方法均是如此)。Python建议在类成员前面加_(一个下划线)的为私有成员,但这仅仅是个建议,没有语法上的强制限制,也就是说你还是可以调用_开头的变量和方法。不过,Python里以两个下划线开头的类成员就不能直接访问了,例如:
1 class A:
2 def __init__(self):
3 self.__x = 1
4 a = A()
5 print a.__x
6 #输出 AttributeError: A instance has no attribute '__x'
更多精彩
赞助商链接