Python面向对象程序设计之类的定义与继承简单示例
本文实例讲述了Python面向对象程序设计之类的定义与继承。分享给大家供大家参考,具体如下:
定义类:
classA: def__init__(self,name): self.name=name defsay(self): printself.name def__del__(self): print"delete:%s"%self.name
1.python类的所有方法定义都必须至少含有一个参数,也就是self参数。在方法定义时作为第一个参数存在,self参数是类实例的引用。
2.__init__方法相当于构造函数,在获取类实例的时候会执行。
3.__del__方法相当于析构函数,会由系统自动调用(类似垃圾回收),也可以通过del对象主动调用。
4.上例在__init__方法里定义了一个对象的变量name,可以在类内其他地方通过self.name引用。
获取类的实例并调用类方法:
a=A('Jim')#不用new a.say()#Jim A.say(a)#Jim
调用类的方法有两种方式:
1.对象.方法名,此种方式self参数不需要指定,对象引用作为实参自动传入。
2.类名.方法名,此种方式self参数需要指定为类实例的引用。
类变量和对象变量:
classA: pass a=A() printA.j#报错,因为A类中不存在类变量j A.i=1#在A类中添加类变量i,并赋值1 printA.i#打印1 printa.i#打印1,这里的a.i实际上取到的是类A的类变量i,非对象a的对象变量i(其尚不存在) a.j=2#在对象a中添加对象变量j,并赋值2 printA.j#报错,因为A类中不存在类变量j printa.j#打印2 a.i=3#在对象a中添加对象变量i,并赋值3 b=A() printA.i#打印1,A.i取到的是A类中的类变量i printa.i#打印3,a.i取到的是a对象中的对象变量i,取不到类A中的类变量i(因为重名优先获取对象变量) printb.i#打印1,b.i取到的是A类中的类变量i
总结:
1.对象的变量称为对象的域;类的变量称为类的域(相当于类静态变量)。类的域和方法合称类的属性。(我们没用域,而用了变量这个称呼)。
2.类和对象的变量可以在类定义后随意添加。
3.如果我们用对象.i取用变量(取用而非赋值),会先试图取用对象变量i,若不存在则试图取用对象所属类中的类变量i,若还不存在则报错。
4.可使用对象引用获取类变量值(在不存在重名的对象变量时),但不能用对象引用给类变量赋值(会创建同名对象变量)。
定义类变量:
在类内直接定义的变量是类变量,不属于某个特定对象,相当于静态变量,如:
classP: __pri="privatevia" count=1 printP.count#打印1 printP.__pri#报错,类P中没有名称为__pri的属性
1.使用类变量通常用:类名.变量名
2.类的属性默认是公有的;类定义中,变量名为双下划线开头的变量是私有的(依靠约定来保证)。
类的继承:
在类定义时,类名称后紧跟一个元组名,此类即为以元组的元素为父类的子类:
classSubClass(SuperClass): pass classSubClass(SuperClass1,SuperClass2): pass
1.若类没有显式的定义__init__方法,则python会自动生成一个__init__(self)方法;且如果这个类有父类,此子类自动生成的__init__(self)方法会依次调用父类的__init__(self)方法,若父类中没有__init__(self)这样的方法,执行就会报错。
2.若显式定义__init__方法,父类的__init__方法不会自动调用,需要代码显式调用。这和java不同,java会自动在构造方法的第一句加入super()语句。
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。