python面向对象初见

时间:2021-07-29 16:30:13

正好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
        

    

 多继承: