zoukankan      html  css  js  c++  java
  • python:面向对象编程

    一、面向对象概念简介:

    当编写复杂功能时,需要使用类。

    1、类(class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类是一个模型,一个种类,一个蓝图

    2、数据成员:类变量或实例变量,用于处理类及其实例对象的相关的数据

    3 、方法:类中定义的函数

    4、实例:实例就是对象。

    5、实例化:创建一个类的实例,类的具体对象。

    6、类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。类变量不需要实例化就可以使用。self.xxx

    7、局部变量:定义在方法中的变量,只作用于当前实例的类。

    8、对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

    9、实例变量:如果变量前面加了self的话,在这个类里面,其他的函数都可以使用这个变量。必须得实例化之后才可以用。

    10、实例方法:函数带有self的,就是实例方法,实例方法必须实例化后才能使用

    11、self:本类对象

    12、类方法:

    类方法
            @classmethod
            def shuoming(cls):
                cls代表的就是当前这个类
                pass
            1、不需要实例化就可以调用的,直接类名.xxx,
            self.shuoming()
            2、它调用不了实例方法和实例变量。

    13、静态方法

            只是写在类里面而已,它调用不了类方法、类变量、实例方法、实例变量,通过类名.XX使用
            类方法、实例方法可以调用它
                self.act()
                cls.act()

    14、属性方法:看起来像变量的方法

    二、面向对象编程具体应用

    1.示例一:

    class Buy_car:#用class定义类,一般类用大写字母开头
        def shop(self):
            print('4s')
    
        def baoxian(self):
            print('保险公司')
    
        def shuiwuju(self):
            print("税务局")
    
        def jiaoguansuo(self):
            print("交管所")
     #面向对象也是包含面向过程的 。面向对象:化零为整
    xiaowang=Buy_car()    #类名加括号就是实例化。类不能直接使用,需要实例化才能使用
    #带了self的必须要实例化才能用、
    # Buy_car.baoxian()        #错误示范。类未实例化,直接用会报错。
    xiaobai=Buy_car()
    xiaowang.shuiwuju()  
    xiaobai.shuiwuju()

    2.示例二:

    #定义类:

    class Person():
        #self:代表本类的对象
        country='China'   #类变量:直接在类中定义的变量是类变量,类变量是公共的,谁都可以使用,使用时也是self.country
        #类变量不需要实例化也可以用
        def __init__(self,name,leg=2)    #构造函数,类在实例化的时候,会自动执行构造函数。如果有入参,在实例化的时候也必须传参
            sex='unknow'        #局部变量,只能作用于当前实例
            self.name=name    #如果在变量前加了self.那么在这个类的其他方法中都可以用
            self.leg=leg
            print("self的内存地址",id(self)    #id():查看内存地址,与实例化后的类的内存地址一样
        def __del__(self):
    #析构方法:程序执行完,自动执行析构方法中代码。被销毁是指不在内存中,当代码执行完就不在内存中。所以就执行析构方法
            print("什么时候执行析构方法")
        def fly(self):     #类中的方法,互相调用时,用self.XXX
            print('fly')
            self.bird="猫头鹰"       #实例变量:任意位置定义self.XXX,都可以用self.XXX调用
        def eat(self):
            print('eat')
            print("eat:%s"%self.bird)   #调用实例变量
       def wc(self):
            print("%s去了%s次厕所"%(self.name,self.count))     #注意这里没有定义self.count,所以 如果要调用wc的话,就要先定义self.count
        def say(self):
            print('是我的名字是%s,我有%s条腿'%(self.name,self.leg))
            print('国籍是%s'%self.country)
            
                

    #实例化Person类,并调用

    print(Person.country)    # 类变量不需要实例化也可以用
    hm=Person('hm',2)    #实例化即会执行init函数。如果类中的构造函数定义了参数,实例化时也要传参。
    Person.say(hm)#跟hm.say()其实是一样的
    hm.say()#类中的self就是实例化对象本身,谁调就是谁,self 就是hm
    #在类中能点(.)出来的,在实例化后一样可以点出来
    print('hm实例的内存地址',id(hm))        #实例后的内存地址,跟类中的self一样.
    
    hm.fly()#要先调用fly ,获取bird,后边的eat()才能用
    hm.eat()#
    hm.count=50#先给count定义,后边用过count的方法才能执行
    hm.wc()

    #删除实例:del XX

    del hm   #删掉hm实例,删掉后,相当于实例不存在了,实例中的变量和方法也不能用
    
    #如果类实例化后,用del删掉了该实例,需要重新对这个类实例化。

     析构函数是在程序结束后调用的,或者当对对象的所有引用都被删除时调用的

    3.list、dict等都是类,

    我们调用的list.append(),其实就是调用的list的实例

    a=[1,2,3,4]
    a=list([1,2,3,4])   #同上
    a.append('4,5,6')

    三、类方法:类自带的方法,即类方法

    class Car:
        def run(self): #实例方法中,调用本类变量、类方法都要用self.XXX调用
            print("run")
            hm=Person('hanmin')   #实例方法中,调用其他类的实例方法
            print(self.country)            #这个country是本类中的country
            print(hm.country)            #这个country是Person这个类中的country
            self.shuoming()  #类方法是公共的,实例方法中也可以调用类方法
            #run=self       #self代表本身的类,可以XXX=self,就是实例化这个类
            #run.shuoming()#类方法是公共的,实例方法中也可以调用类方法
      #在类中,函数的调用不是按顺序执行的,可以直接调用后边代码中的变量或方法

    @classmethod
    #加了装饰器的方法就是类方法。类方法也是公共的。类中的方法都可以调用。但是不能直接调用实例方法和实例变量. #类方法在调用时,不需要实例化,直接 类名.方法名()即可调用 def shuoming(cls) #cls代表此类本身,与实例方法中的self类似 #类方法中只能直接调用类变量、类方法 print("怎么造汽车") print("造%s的汽车"%cls.country) bmw=cls #cls代表本身的类,其实相当于把这个类实例化 bmw.run() #实例方法实例化后,可以调用实例方法

    四、静态方法

    @staticmethod    #写在类中的普通方法,不需要实例化,不能调用类方法,也不能调用实例方法。但是类方法、实例方法都能调用静态方法
        def act():
             print('静态方法')
     Car.act()  #调用时直接用类名.方法名

    五、属性方法:

    看起来像变量的一个方法。不能有传参,不能有入参

        @property
        def name(self):
            return '大黄蜂'
    print(c.name)   #属性方法,调用时直接调用函数名,不能加括号

    六、面向对象编程例子:

    import pymysql
    class MySQL:
        def __init__(self ):    
            self.conn=pymysql.connect(host='117.25.23.20,user='XXX',password='45461
    ', db='jxz',port=3306,charset='utf8',
                           autocommit=True)
                self.cur=self.conn.cursor(pymysql.cursors.DictCursor)
        def __del__(self):   #析构方法:
            print('什么时候执行析构方法')
        def excute_one(self,sql):
            self.cur.execute(sql)
            return self.cur.fetchone()
        def execut_many(self,sql):
            self.cur.execute(sql)
            return self.cur.fetchall()
        def close(self):
            self.cur.close()
            self.conn.close()
        def __del__(self):    #当实例被执行完后,执行此代码
            self.cur.close()
            self.conn.close()
            print('连接已被关闭')
    m=MySQL()
    print(m.excute_one('select * from app_myuser'))

      

  • 相关阅读:
    Linux下ps -ef 和 ps aux的区别
    oracle exp imp日常使用
    oracle 切换用户操作--or--sys用户密码忘记
    widows本地-xshell实现远程连接linux服务器图形界面
    oracle ASM安装过程中UDEV实现磁盘绑定
    Oracle修改指定表空间为自动扩展
    Oracle 扩展表空间大小的几种方式
    本地主机不安装oracle客户端--访问远程oracle数据库
    解决ubuntu安装系统默认没有创建root用户
    解决 ORA-27102: out of memory
  • 原文地址:https://www.cnblogs.com/hancece/p/11153188.html
Copyright © 2011-2022 走看看