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'))

  

原文地址:https://www.cnblogs.com/hancece/p/11153188.html