正好java也学到面向对象编程,把python的oo风格也对比着学一下。
类的写法,python真的是比java简单多了
直接贴个类吧:
class p: a='233'#数据成员public python语法无需声明类型 b=0 __c=123#私有成员private def e(self):#public函数 self指实例必须加入 print('456') x=p()#自动调用构造函数__init(self)__ ,不需要和类同名这点和c++java不同 print(x.a) print(x.b) #print(x.__c)私有类数据成员无法访问 x.e()
特别的 private在python中用两个下划线__放在数据或者函数名前面,外部无法访问只能从内部访问
构造函数__init__可以自己写但是python不能重载它:java中我们可以写多个构造函数适应不同的实例化操作,在python不能这么做,解决办法是给参数默认值来适应不同情况:
class p: a=0 b=0 i=0 def __init__(self,a=1,b=1): self.a=a self.b=b self.i='1' x=p() print(x.a) print(x.b) print(x.i) #输出1 1 1 y=p(8,8) print(y.a) print(y.b) print(y.i) #输出8 8 1 z=p(6) print(z.a) print(z.b) print(z.i) #输出6 1 1
继承:不多说,直接上code
class p: a=0 b=0 i=0 def aaa(self): print('aaa') def show(self): print (self.a,self.b,self.i) class p1(p): def aaa(self,a):#重写aaa print('aaa1') self.a=a v=p() v.aaa() v.show() u=p1() u.aaa(1)#这里若是u.aaa()则会出错 因为u不是p类,aaa已经重写无法调用原本的aaa u.show() #解决方法就是上面的给a一个默认值 #输出:aaa 0 0 0 # aaa 1 0 0
多继承: