• 面向对象(一)


    一、类和对象

    #创建类,类名为mail
    class mail:
    #【方法】
        def email(self,mail,neirong):
            print("收件人: ",mail,"
    内容: ",neirong)
            return True                              #如果不定义返回值,默认为None
    
    #【调用】
    obj = mail()                                     #创建对象,对象名obj
    obj.email('Admin','你好,请查收附件表格。')          #通过对象执行方法
    注:当执行obj = mail()时,类对象指针将obj指向了类mail。
    

    二、面向对象

    概念:面向对象是一种编程方式,需要类和对象来实现。

       类就是一个模板,模板里包含多个函数,函数里实现一些功能。

         对象是根据类创建的一个实例,通过实例对象可以执行类中的函数。

             面向对象也是对函数或事物进行分类和封装。

    面向对象三大特性:

       封装,继承,多态

    1.函数式编程和面向对象编程对比

    函数式编程

    def add(host,username,passwd):
        print(host,username,passwd,"add")
    def remove(host,username,passwd):
        print(host,username,passwd,"remove")
    
    def modify(host,username,passwd):
        print(host,username,passwd,"modify")
    
    def select(host,username,passwd):
        print(host,username,passwd,"select")
    
    #执行函数
    add('host.com','admin','123')
    remove('host.com','admin','123')
    modify('host.com','admin','123')
    select('host.com','admin','123')
    

    面向对象编程

    class SQLHelper:
        def fetch(self, sql):
            print(self.hhost)
            print(self.uuserane)
            print(self.pwd)
        def create(self, sql):
            pass
        def remove(self, nid):
            pass
        def modify(self, name):
            pass
    obj1 = SQLHelper()
    #以下定义的值被封装到对象obj1中,在类中可以直接调用。
    obj1.hhost = "c1.salt.com"
    obj1.uuserane = "alex"
    obj1.pwd = "123"
    obj1.fetch("select * from A")
    2.什么情况下适合使用面向对象?
      当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可。
    

    三、self是什么?

    self是一个python会自动给传值的参数。
    
    哪个对象执行方法,self就是谁。
    
    obj1.fetch(.....)               self = obj1
    

    四、构造函数

    类中有一个特殊的方法,叫__init__方法。
    当python解释器遇到类名加()时,会自动执行这个类的init方法
    class S1:
        def __init__(self):
            print('自动执行init')
    
    obj = S1()
    

    五、封装

     封装:将内容封装到某个地方,以后再去调用被封装在某处的内容

              将内容封装到某处

       从某处调用被封装的内容

       对象可以封装任何类型的数据

    1.封装字符串
    class sql:
        def __init__(self,a,b,c):               #构造方法,通过类创建对象时自动执行
            print("自动执行init")
            self.hhost = a
            self.uusername = b
            self.ppasswd = c
        def create(self,sql):
            print(self.uusername)
        def select(self,sql):
            print(self.ppasswd)
    
    obj1 = sql('admin.com','admin',123)         #将三个值分别封装到obj1(self) a,b,c属性中
    obj1.select("select * from S")
    
    #调用
    print(obj1.hhost)
    print(obj1.uusername)
    print(obj1.ppasswd)
    2.封装对象
    #把对象c2_obj封装到c1_obj对象中,并赋值给c1类中的obj属性
    class c2:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
    #方法里面没有返回值,默认返回none
        def show(self):
            print('c2')
            
    c2_obj = c2('c2',11)
    c1_obj = c1('c1',c2_obj)
    print(c1_obj.name,c1_obj.obj.name)

    3.多层封装

    class c1:
        def __init__(self,name,obj):
            self.name = name
            self.obj = obj
    #把对象c2_obj封装到c1_obj对象中,并赋值给c1类中的obj属性
    class c2:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
    #方法里面没有返回值,默认返回none
        def show(self):
            print('c2')
    class c3:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
    
    c2_obj = c2('c2',11)
    c1_obj = c1('c1',c2_obj)
    c3_obj = c3('c3',c1_obj)
    
    c3_obj.age.obj.show()

     六、继承与多继承

    1.继承

    子类可以继承父类的内容。

    #子类继承父类的所有功能,相当于在子类中又复制了一份方法
    #子类 ==> 父类 派生类 ==> 基类
    class F1:
        def show(self):
            print('F1')
        def foo(self):
            print(self.name)
    class F2(F1):
        def __init__(self):
            self.name = 1234
    
        def showtime(self):
            print('F2')
    obj = F2()
    obj.show()        #打印结果  F1
    obj.foo()         #打印结果  1234
    #如果子类和父类中有相同的方法,优先调用子类自己的方法。
    class S1:
        def F1(self):
            self.F2()
        def F2(self):
            print('S1.F2')
    class S2(S1):
        def F3(self):
            self.F1()
        def F2(self):
            print('S2.F2')
    
    obj = S2()
    obj.F3()
    

    多继承

    #多继承,查找方法
    #查找方法的顺序根据传入参数的顺序
    class A:
        def A(self):
            print('再找我')
    class B(A):
        def B(self):
            print('先找我')
    class C:
        def __init__(self):
            print('我是在创建对象时默认执行的')
        def C(self):
            print('都不行,再找我')
    class D(B,C):
        def D(self):
            self.A()
    obj = D()
    obj.A()
    
    

    #当多个子类拥有相同的父类时,方法是如何去查找和使用的

    #当多个子类拥有相同的父类时,
    class A0:
        def A0(self):
            print('A0')
    class A1(A0):
        def A1(self):
            print('A1')
    class A2(A0):
        def A2(self):
            print('A2')
    class A3(A1):
        def A3(self):
            print('A3')
    class A4(A2):
        def A4(self):
            print('A2')
    class A5(A3,A4):
        def A5(self):
            print('A5')
    obj = A5()
    obj.A0()
    

    #

    class A:
        def some(self):
            print('打印我')
    
    class D:
        def forever(self):
            self.run()
    
    class C(D):
        def __init__(self):
            print('init2')
        def run(self):
            self.some()
    class B(C):
        def __init__(self):
            print('init')
        def some(self):
            print('打印我?')
    
    class E(A,B):
        def __init__(self):
            pass
    
    obj = E()
    obj.forever()
    

      

    
    
  • 相关阅读:
    MySQL DATE_ADD() 函数
    今天一早来打开IDEA,全面飘红,所有的含有import语句的文件都会报错
    Spring cloud Eureka注册中心搭建的方法Spring cloud Eureka注册中心搭建的方法
    Spring Cloud Config配置中心
    在IDEA下导入Maven项目之后 Dependencies报红线
    解决idea项目没有蓝色小方块
    idea 导入源码显示橙色
    MYSQL中的UNIX_TIMESTAMP函数
    kernel 文件系统挂载流程分析【转】
    Linux--根文件系统的挂载过程分析【转】
  • 原文地址:https://www.cnblogs.com/Z-style/p/5599127.html
Copyright © 2020-2023  润新知