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的父类中找 
永远优先最左边 类似二叉树
同时若两边有公共的父类的话 优先子类 最后在共同父类(根)里找
"""

 

posted @ 2019-09-06 21:43  zzzi  阅读(174)  评论(0编辑  收藏  举报