WEB开发网
开发学院软件开发C语言 从C#到Python —— 4 类及面向对象 阅读

从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'

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Python 面向 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接