python——面向对象(一)
""""" 一、定义类并执行类中的方法 class类名: def 方法名(self,arg): print(arg) return1 中间人(就是自定义的一个变量、对象而已)=类名() ret=中间人.方法名(1) print(ret) elf指中间人 self必须加 面向对象有三种特性 1.封闭 2.继承 3.多态:python原生多态 """ #例子: class Bar: def foo(self,arg): print(self,arg) z1=Bar() print(z1) z1.foo(111) print('=============') z2=Bar() print(z2) z2.foo(666) #结果为: # #<__main__.Bar object at 0x000001F048FF77F0> # <__main__.Bar object at 0x000001F048FF77F0> 111 # ============= # <__main__.Bar object at 0x000001F048FF7B70> # <__main__.Bar object at 0x000001F048FF7B70> 666 class Bar: def foo(self,arg): print(self,self.name,arg) #这里self就是为z 提取z中的name 也就是说self就是中间变量或者说是带进去那个数的自己 z=Bar() z.name='lin' z.age=20 z.gender='male' z.foo(666) #结果为: #<__main__.Bar object at 0x000002360E0B7BA8> alex 666 """ 二、构造方法 """ class Bar: def __init__(self,name,age): """ __initt__为构造方法 """ print('123') def foo(self): print('456') z=Bar('lin',20) #这样可以传进去 #一般将这些东西都放在init里。也是进行一个初始化 #当构建了一个z=Bar()之后 内部会自动执行init方法 #python自动帮你调用 print(z) z.foo() """ 结果为: 123 <__main__.Bar object at 0x000001EC423A7E48> 456 """ #三、应用 class Person: def __init__(self,name,age): self.name=name self.age=age def show(self): print('%s-%s'%(self.name,self.age)) lin=Person('Lin',20) lin.show() ZZZI=Person('zzzi',20) ZZZI.show() """"" Lin-20 zzzi-20 """"" #四、三大特征之一:继承 class Grandfather: def piaochang(self): pass class Father(Grandfather):#父类、基类 def chifan(self): pass def hejiu(self): pass def shuijiao(self): pass class Son(Father):#子类、派生类 def wc(self): pass s=Son() s.chifan()#父亲里的所有函数都可以继承 s.piaochang()#父亲继承了爷爷 """" 同时 若是不想继承父类的某个函数设为x 可以在子类中重新写一个 这样默认会执行子类的 若父类子类都想执行可以用方法: 1.super(当前类名,self).x() 推荐用super 其为固定写法 2.也可以用Father.x(self) """ #2.多继承问题 class F0: def a(self): print('F0') class F1(F0): def a(self): print('F1') class F2: def a(self): print('F2') class S(F1,F2): pass obj=S() obj.a() """"" 其结果为F1 当多继承有相同函数时,优先选择第一个继承的 多继承只能在python和C++中使用 若F1中同样没有时 优先在F1的父类中找 永远优先最左边 类似二叉树 同时若两边有公共的父类的话 优先子类 最后在共同父类(根)里找 """