类的定义:
- 类
- class Parent:
- classNum = 10;
- def __init__(self, age, name):
- self.num = 5;
- self.age = age;
- self.name = name;
- def __del__(self):
- print("Deleting object");
- def func(self):
- pass;
- def printNum(): #这种定义会抛出异常,因为python中没有类似与java中的类方法
- print Parent.classNum;
- if __name=="__main__":
- mc = Parent();
- print "Class mumber:", Parent.classNum;
- print "Class mumber:", mc.classNum;
- print "Instance number:", mc.num;
- 说明:
- __init__:构造函数,在对象实例化的时候自动调用
- __del__:析构函数,用于对象销毁时执行,当对象实例的引用计数为0时,该对象实例将自动被析构回收
- self:类似于java、c++中的this指针,用于引用实例本身;不同于c++的是,self使用“.”进行成员引用
- classNum:类变量,相当于java中的static变量,可以通过类名直接访问,也可以通过实例对象访问
- num:类实例对象,只能通过实例对象进行访问,通过类名进行访问将导致异常“AttributeError: class MyClass has no attribute 'num'”
- 静态方法:python中有类变量,但是没有类方法,即没有类似于java中的static方法
继承:
- 单继承
- class child(Parent):
- def tell(self):
- Parent.tell(self);
- print "I'm child"
- 多继承
- class child(Father, Mother):
- def __init__(self, age, name):
- self.age = age;
- self.name = name;
- Father.__init__(self, 48, "Bob"); #在子类中调用父类的初始化方法
- def tell(self):
- print "I like to play with both of father and mother!"
- 说明:
- 继承的语法就是在类名后面的括号中用逗号分隔父类
- 子类继承父类的类变量、实例属性、方法
- 覆盖:当子类中存在于父类相同名字(不同于Java中的方法签名,python中只检查方法名)的方法时会覆盖父类的方法;覆盖规则对于类变量、实例属性同样适用
- 重载:python中不支持重载,即不允许存在名字相同的方法
封装:
- 由于python是动态语言,实际上python不支持封装,因为可以通过类实例随意添加和修改属性
- 由于python没有访问权限修饰符,所以python不支持数据隐藏,既可以访问对象的所有属性
多态:
- 由于python是动态语言,所以不支持类似于Java的多态(用子类去实例化一个父类类型的对象)