1. 程式人生 > >python面向對象--類

python面向對象--類

sed mit spa sql self. 就是 靜態方法 nec utf

1、類的概念:簡單來說就是一組符合邏輯的參數或者是函數,一個種類、一個模型。

一個類中可以包含任意參數,並且可以定義任意個方法,但類並不是隨意的將多個參數或者方法包含在class下,而是創建一個在事物之間具有邏輯鏈接的對象。

在python中class關鍵字定義一個類,在class中有def定義的函數,也就是類的方法。

2. 實例、實例化、對象

    實例或叫對象:
根據模型制作出來的東西。
寫法: 對象名/實例名 = 類名(參數-如果有)

實例化:
就是做東西的這個過程。

3.方法:類裏面的函數

寫法:
def 方法名(self,參數-如果有):

        pass

4. 屬性:類裏面的變量
5. 構造函數:類在實例化的時候會自動執行的一個函數
寫法:
   def __init__(self,參數-如果有):
        pass
6. 析構函數:實例在銷毀的時候自動執行的函數
  寫法:
    def __del__(self,參數-如果有):
        pass
7. self:代表的本類對象。
例1:
#以下3種定義類的方式在python3中沒有區別,可任意使用

class My:  #經典類
    pass

class My2(object):  #新式類
    pass

class My3(): #
新式類 pass country = China #全局變量 class Person: def __init__(self,name): #構造函數 __init__ print(開始了,name) self.name = name # 實例變量 self.age = 18 # 人的名字是 xxx self.data = 哈哈哈 self.addr = 北京 def cry(self,size): #cry是方法,size是屬性 print
(%s在%s哭。年齡是%s%(self.name,size,self.age)) self.size = 大哭 self.date = 20190106 def say(self): print(我叫%s,我住在%s.%(self.name,self.addr)) print(self.size) print(今天的日期,self.date) self.help() def help(self): print(self.date) mcb = Person(Jack) #這裏的“賦值”就是在實例化 cq = Person(Alice) #mcb和cq就是實例或者稱作對象 mcb.grilfriend = cq print(Jack的女朋友,mcb.grilfriend.name) mcb.grilfriend.cry()
#以上輸出結果如下:

開始了 Jack
開始了 Alice
Jack的女朋友 Alice
Alice在大哭。年齡是18

例2:

技術分享圖片
import pymysql
class MyDb:
    def __init__(self,host,user,password,db,port=3306,charset=utf8):#構造函數,
        print(連接數據庫)
        self.conn = pymysql.connect(host=host,user=user,password=password,
                        db=db,port=port,charset=charset)
        self.cur = self.conn.cursor()

    def execute_one(self,sql):
        print(返回單條數據)
        self.cur.execute(sql)
        res = self.cur.fetchone()
        return res

    def execute_many(self,sql):
        print(返回多條數據的)
        self.cur.execute(sql)
        res = self.cur.fetchall()
        return res

    def __del__(self):#析構函數
        print(關閉數據庫連接)
        self.cur.close()
        self.conn.close()

my = MyDb(100.10.1.10,name,pwd,dbname) #實例化

#一個變量前面加了self之後,那麽在這個類裏面的其他的函數都可以用了。

res = my.execute_one(select * from app_myuser where username="testuser1";)
print(res)

res2 = my.execute_many(select * from app_myuser limit 10;)
print(res2)
View Code 技術分享圖片
#以上輸出結果如下
連接數據庫
返回單條數據
(34847, TESTUSER1, 96e79218965eb72c92a549dd5a330112, 1)
返回多條數據的
((1122, liuyana03, 123658, 1), (1123, wpp, 1234567, 1), (1128, wangcan, hhhh, 1), (1129, wangcan1, hhhh, 1), (1185, wangliwen, 123456, 1), (1186, wangzhihua, 123456, 1), (1187, zyb123, 456789, 1), (1188, nhy1233, 456789, 1), (1190, aaaa, 1234566, 1), (1191, zzf, 123456, 1))
關閉數據庫連接
View Code

8. 類變量:就在直接在類下面定義的變量,沒有加self的,每個實例都可以用

  寫法:

  class 類名:
  類變量名 = 值
    def __init__(self,參數名-如果有):
        pass

9. 類方法:

    1、不需要實例化就可以調用
2、它可以使用類變量
3、可調用其他的類方法。
4、它不可以使用實例方法、實例變量
如果類裏面的這個方法,它並沒有使用到其他的實例變量、或者其他實例方法,那麽就給他定義成類方法
寫法:
   @classmethod
   def 方法名(cls): #一般默認寫cls,跟方法裏的self意思差不多
      pass

10. 靜態方法:
1、不需要實例化就可以調用的
2、它就是一個定義在類裏面的普通函數,不能使用實例變量、實例方法、不能使用類變量、類方法。
寫法:
  @staticmethod
  def 方法名():
     pass

11. 屬性方法:
看起來像變量的一個方法。
寫法:
  @property
  def 方法名(self):
     pass

12. 實例變量:
寫法: self.xxx = xxx
加了self的變量才是實例變量,必須得實例化之後才可以使用

13. 實例方法:
需要傳self的方法,都是實例方法,必須得實例化之後才可以使用
實例方法裏面可以隨便通過self來調用實例方法,類方法,靜態方法,類變量。
技術分享圖片
class Car:
    wheel = 4 #類變量
    def __init__(self,color,p):
        self.color = color #實例變量
        self.p = p

    def help(self): #實例方法
        print(汽車有%s個輪子%self.wheel)
        print(汽車的顏色是%s%self.color)
        print(牌子%s%self.p)
        print(=*10)
        self.haha() #調用其他方法
        self.check_wheel()

    @classmethod #類方法
    def check_wheel(cls):
        print(cls的內存地址,id(cls))
        print(cls.wheel) #類方法可以使用類變量
        cls.haha() #類方法可以調用其他方法

    @classmethod #類方法
    def haha(cls):
        print(哈哈哈)
        cls.help2() #類方法可調用其他的類方法

    @staticmethod #靜態方法
    def help2():
        print(這個類的作用是造汽車,它裏面有xxx方法)

    @property #屬性方法
    def yesterday(self):
        import datetime
        res = datetime.date.today()  + datetime.timedelta(-1)
        return str(res)

    def tomorrow(self): #實例方法
        import datetime
        res = datetime.date.today()  + datetime.timedelta(1)
        return str(res)

Car.help2()  #靜態方法的調用不需要實例化
#上一行代碼輸出:這個類的作用是造汽車,它裏面有xxx方法

mcb = Car(赤橙黃綠青藍紫,Jack)
print(mcb.yesterday) #屬性方法的調用,對象名(yesterday)後不需要加括號
#上一行代碼輸出:2019-01-10

print(mcb.tomorrow()) # 輸出:2019-01-12

mcb.wheel = 28
mcb.haha()
#上一行代碼輸出:
# 哈哈哈
# 這個類的作用是造汽車,它裏面有xxx方法

mcb.help()
mcb.help2()

print(Car的內存地址,id(Car)) #輸出:Car的內存地址 38354920

Car.check_wheel() #類方法不需要實例化就可以調用

Car.wheel= 19
print(Car.wheel) #輸出:19
View Code 技術分享圖片
#以上代碼輸出:
這個類的作用是造汽車,它裏面有xxx方法
2019-01-10
2019-01-12
哈哈哈
這個類的作用是造汽車,它裏面有xxx方法
汽車有28個輪子
汽車的顏色是赤橙黃綠青藍紫
牌子Jack
==========
哈哈哈
這個類的作用是造汽車,它裏面有xxx方法
cls的內存地址 36782056
4
哈哈哈
這個類的作用是造汽車,它裏面有xxx方法
這個類的作用是造汽車,它裏面有xxx方法
Car的內存地址 36782056
cls的內存地址 36782056
4
哈哈哈
這個類的作用是造汽車,它裏面有xxx方法
19
汽車有19個輪子
汽車的顏色是黑色
牌子奔馳
==========
哈哈哈
這個類的作用是造汽車,它裏面有xxx方法
cls的內存地址 36782056
19
哈哈哈
這個類的作用是造汽車,它裏面有xxx方法
View Code

python面向對象--類