Python學習(十一) Python 類
阿新 • • 發佈:2018-04-07
count sym == AC val setter 輸入 com ttr
Python 類
面向對象編程是有效的軟件編寫方法之一。
python程序編寫方法
- 1、函數編程,使用函數方式
- 2、面向對象編程,使用類方式
創建類
創建方法
構造方法,__init__(self,arg)
obj = 類(‘a1‘)
普通方法
obj = 類(‘xxx’)
obj.普通方法名()
格式如下:
class DataBaseHelper:
def __init__(self, ip, port, username, pwd):
self.ip = ip
self.port = port
self.username = username
self.pwd = pwd
def add(self,content):
# 利用self中封裝的用戶名、密碼等 鏈接數據
print(‘content‘)
# 關閉數據鏈接
def delete(self,content):
# 利用self中封裝的用戶名、密碼等 鏈接數據
print(‘content‘)
# 關閉數據鏈接
def update(self,content):
# 利用self中封裝的用戶名、密碼等 鏈接數據
print(‘content‘)
# 關閉數據鏈接
def get(self,content):
# 利用self中封裝的用戶名、密碼等 鏈接數據
print(‘content‘)
# 關閉數據鏈接
#封裝數據庫登陸IP,端口,用戶名,密碼
s1 = DataBaseHelper(‘1.1.1.1‘,3306, ‘jorbabe‘, ‘6666‘)
面向對象三大特性
面向對象三大特性之一:封裝
使用構造方法封裝相同屬性:
def __init__(self, n,a):
self.name = n
self.age = a
self.xue = ‘o‘
b1 = Bar(‘jorbabe‘, 18)
b2 = Bar(‘yunlei‘, 19)
面向對象三大特性之二:繼承
1、繼承
class 父類:
pass
class 子類(父類):
pass
2、重寫方法 防止執行父類中的方法
3、self永遠是執行改方法的調用者
4、
super(子類, self).父類中的方法(...)
父類名.父類中的方法(self,...)
5、Python中支持多繼承
- a. 左側優先
- b. 一條道走到黑
- c. 同一個根時,根最後執
面向對象三大特性之三:多態
python====> 原生多態,忽略多態,python傳參不用指定參數的類型。
v = ‘jorbabe‘
def func(arg):
print(arg)
func(1)
func(‘jorbabe‘)
類成員
class Foo:
#靜態字段,屬於類
country = ‘中國‘
def __init__(self, name,):
# 普通字段
self.name = name
# 普通方法
def show(self):
print(self.name)
obj = Foo(‘jorbabe‘)
obj.name
obj.show()
類成員: 字段
- 普通字段,保存在對象中,執行只能通過對象訪問
- 靜態字段,保存在類中, 執行 可以通過對象訪問 也可以通過類訪問
方法
- 普通方法,保存在類中,由對象來調用,self=》對象
普通方法
class Foo:
def bar(self):
print (‘bar‘)
#推薦
obj = Foo()
obj.bar()
Foo.bar(obj)
- 靜態方法,保存在類中,由類直接調用
#類方法
class Foo:
def bar(self):
print (‘bar‘)
#靜態方法
@staticmethod
def sta():
print (‘sta‘)
#靜態方法+傳參
@staticmethod
def stac(a1,a2):
print (a1,a2)
Foo.sta()
Foo.stac(1,2)
sta
1 2
- 類方法,保存在類中,由類直接調用,cls=》當前類
#類方法
class Foo:
def bar(self):
print (‘bar‘)
#靜態方法
@staticmethod
def sta():
print (‘sta‘)
#靜態方法+傳參
@staticmethod
def stac(a1,a2):
print (a1,a2)
#類方法
@classmethod
def classmd(cls):
#cls:類名
print (cls)
print (‘classmd‘)
Foo.classmd()
<class ‘__main__.Foo‘>
classmd
應用場景:
- 如果對象中需要保存一些值,執行某功能時,需要使用對象中的值 -> 普通方法
- 不需要任何對象中的值,靜態方法
屬性
class Foo:
def __init__(self):
self.name = ‘a‘
def bar(self):
print (‘bar‘)
#屬性或特性
@property
def per(self):
print (‘per‘)
obj = Foo()
# obj.per()
obj.per
- 調用方式一一對應
class Foo:
def __init__(self):
self.name = ‘a‘
def bar(self):
print (‘bar‘)
#屬性或特性。調用方式:obj.per
@property
def per(self):
# print (‘per‘)
return 1
#屬性傳參。調用方式:obj.per = 123
@per.setter
def per(self,val):
print (val)
#屬性參數刪除。調用方式:del obj.per
@per.deleter
def per(self):
print (‘666666‘)
obj = Foo()
# obj.per()
obj.per
r = obj.per
print (r)
obj.per = 123
del obj.per
1
123
666666
中國的所有省份,用面向對象知識表示?
class Province:
# 靜態字段,屬於類
country = ‘中國‘
def __init__(self, name):
# 普通字段,屬於對象
self.name = name
henan = Province(‘河南‘)
henan.name
henan.name = "河南南"
#hebei = Province(‘河北‘)
# Province.country
print (Province.country)
print (henan.name)
中國
河南南
實例:利用屬性功能實現分頁
class Pargination:
#定義頁碼
def __init__(self,current_page):
#判斷是否是整數
try:
p = int(current_page)
except Exception as e:
p = 1
#頁碼賦值
self.page = p
#計算開始
@property
def start(self):
val = (self.page - 1) * 10
return val
#計算結尾
@property
def end(self):
val = self.page * 10
return val
#定義元組列表
li = []
#定義元組列表賦值
for i in range(1000):
li.append(i)
while True:
p = input (‘請輸入要查看的頁碼:‘)
#給類的方法傳值
obj = Pargination(p)
#類方法未添加屬性前的調用方式
# print (li[obj.start():obj.end()])
#方法添加屬性後的調用方式,去括號
print (li[obj.start:obj.end])
請輸入要查看的頁碼:5
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
請輸入要查看的頁碼:6
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
請輸入要查看的頁碼:aa
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
請輸入要查看的頁碼:
Python學習(十一) Python 類