从C#到Python —— 4 类及面向对象
2010-09-30 22:41:42 来源:WEB开发网而Python类的数据添加方法与C#有一些不同,因为Python是一种动态语言,变量在使用之前不需要定义,所以你可以不在类定义中添加成员变量,而是在运行时动态地添加它们,例如:
1 class A:pass
2 a = A()
3 a.x =1
4 print a.x
当然上述方法不是一种好方法,也很少有人真正这么用(虽然语法上没有任何错误),类的成员变量最好是在类的初始化函数里面声明并初始化。
4.2.2 初始化函数
Python的类提供了类似C#构造函数的东西:__init__(注意前后是两个下划线),类在实例化时会首先调用这个函数。我们可以通过重写 __init__函数,完成变量的初始化等工作。与C#不同的地方是,Python不支持无参数的初始化函数,你至少需要为初始化函数指定一个参数,即对象实例本身(self)。下面是一段简单的示例代码,在该代码中,我们重写了函数__init__,定义并初始化了一个类的成员变量 x:
1 class A:
2 def __init__(self):
3 self.x = 1
4 a = A()
5 print a.x
实际上Python允许在任何成员函数(不仅限于__init__)中声明类的成员变量,不过最好养成在初始化函数中声明成员变量的习惯。
另外,我们也可以定义带多个参数的初始化函数,如下:
1 class A:
2 def __init__(self,x):
3 self.x = x
4 a = A(1)
5 print a.x
当然,Python的类也有类似C#析构函数的东西:__del__函数,但不推荐使用它,Python的垃圾回收机制会帮你做好一切事情。
4.2.3 静态成员(类变量)
你可能已经注意到,在前面的代码中,成员变量x之前也有一个self,这说明该成员属于于类的实例(而不是类本身),这类似C#中的非静态成员。那么如何在Python中定义与类的静态成员呢?这个很简单,只需要在类定义中直接初始化一个变量即可,例如: