zoukankan      html  css  js  c++  java
  • 面向对象

    什么是面向对象:

    #面向对象
    class SQLHelper:
        def fetch(self, sq1):
            print(sq1)
            print(self.hhost)                #执行被封装的函数hhost
            print(self.uusername)            #执行被封装的函数uusername
            print(self.pwd)                  #执行被封装的函数pwd
        def create(self, sq1):
            pass
        def remove(self, nid):
            pass
        def modify(self, name):
            pass
    obj = SQLHelper()
    obj.hhost = ("cl.star.com")             #代表把参数传入 hhost 中封装
    obj.uusername = ("Guido")               #代表把参数传入 uusername 中封装
    obj.pwd = ("123")                       #代表把参数传入 pwd 中封装
    obj.fetch("select*from A")             #执行对象obj的fetch方法,将封装的参数传入self中,(" ")中的参数传入sq1
    

    什么时候用面向对象:

          当某一些函数具有相同参数时,可以使用面向对象的方式,将参数的值一次性封装在对象里,以后到对象中直接取值。

    self是什么:

          self是一个python会自动传值得形式参数,哪个对象执行该方法,self就是那个对象。

    obj1.fetch("kdi")     self = obj1
    obj2.fetch("kdi")     self = obj2
    

    构造方法:

      类中有一个特殊的方法__init__,类()时对象被建立 __init__就会自动被执行

      这个方法可以用来对你的对象做一些你希望的初始化。注意,这个名称的开始和结尾都是双下划线。

    class SQLHelper:
        def __init__(self, a1, a2, a3):    #封装数据
            print("自动执行__init__")
            self.hhost = a1                #a1 = slkj.com   self = obj1
            self.uusername = a2            #a2 = Guido  self = obj1
            self.pwd = a3                  #a3 = 123    self = obj1
        def fetch(self, sq1):          #sq1 = select*from A
            pass
        def remove(self, nid):
            pass
        def modify(self, name):
            pass
    obj1 = SQLHelper("slkj.com", "Guido", 123)
    obj1.fetch("select*from A")
    

    类与对象的关系:

    两种类型的域——

            类的变量和对象的变量,它们根据是类还是对象拥有这个变量而区分。

    类的变量:由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。

    对象的变量:由类的每个对象(实例)拥有。因此每个对象有自己对这个域的一份拷贝,即他们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。

    面向对象的三大特性:

    封装、继承、多态

      封装:

    class c1:
        def __init__(self, name, obj):
            self.name = name
            self.obj = obj
    class c2:
        def __init__(self, name, age):
            self.name = name
            self.age = age
        def show(self):
            print(self.name)
    class c3:
        def __init__(self, a1):
            self.money = 123
            self.aaa = a1
    c2_obj = c2("aa", 11)                #c2_obj是c2的类,name="aa",age=11
    c1_obj = c1("Guido", c2_obj)         #c1_obj是c1类型,name="Guido",obj=c2_obj
    print(c1_obj.obj.age)
    c3_obj = c3(c1_obj)                  #c1_obj=a1
    print(c3_obj.aaa.name,type(c3_obj.aaa.name))
    

     

    继承:

    面向对象编程带来的好处之一就是代码重用,实现这种方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # Author:Guido's admirers
    
    
    class We:
        def __init__(self, name):
            self.name = name
    
        def li(self):
            print("TT", self.name)
    
    
    class No(We):
        def __init__(self, age, name):
            We.__init__(self, name)
            self.age = age
    
        def MM(self):
            print("Good", self.name, self.age)
    
    obj = No("guido", 27)
    obj.MM()
    
    
    执行结果:
    Good 27 guido
    

      

    单继承:

    相当于把父类写入子类里

    class F1:
        def show(self):
            print("show")
        def foo(self):
            print(self.name)
    class F2(F1):                     #子类,派生类
        def __init__(self, name):
            self.name = name
        def bar(self):
            print("bar")
        def show(self):
            print("F2.show")
    obj = F2("Guido")
    obj.show()                       #优先执行本类中的同名方法
    obj.foo()
    
    class S1:
        def F1(self):
            self.F2()
        def F2(self):
            pass
    class S2(S1):
        def F3(self):
            self.F1()
        def F2(self):
            pass
    obj = S2()
    obj.F3()
    obj1 = S1()
    obj1.F1()
    #执行过程中子类中没有的方法去父类里找,父类中与子类中同时有的方法,子类中的方法优先执行。
    

    多继承:

    class c3(c1,c2)

    多态:

    多种形态,多种类型

    def func(arg):
        print(arg)
    func(1)              #对对象进行封装时数据可以是多种类型
    func("Guido")
    func([11, 22, 33])
    

     在:c#与java中没有多态,指定形式参数时要指出参数类型,只能通过类的继承增加多态的形式,类与该类的子类。

    #此代码只做演示便于理解,不是正确的。
    def func(int arg):
        func(123)
        func("Guido")      #报错
        
    class A:
        pass
    class B(A):
        pass
    class C(A):
        pass
    def func(A, arg):    #aeg参数:必须是A类型或A的子类型
        print(arg)
    obj = A(arg)
    func(obj)
    
  • 相关阅读:
    延时调用的php代码
    mysql 官网下载太慢了,来这里!!!
    解决react-native 运行报错:Entry, ":CFBundleIdentifier", Does Not Exist
    mongodb增删改查常用命令总结
    Linux 查看文件内容(8)
    Linux mv命令(7)
    Linux文件拷贝(6)
    Linux 创建与删除(5)
    Linux cd命令(4)
    ls 命令通配符(3)
  • 原文地址:https://www.cnblogs.com/Guido-admirers/p/6097022.html
Copyright © 2011-2022 走看看