如何建立類:
class 類名:
pass
eg:class bar: # 定義乙個類
def foo(self, arg): # self 永遠是呼叫方法的物件,即中間人
print(self, self.name, self.age, arg)
obj = bar() # 使用 bar 類,建立乙個物件 obj
print(obj)
obj.name = 'klvchen'
obj.age = 28
obj.foo(666)
執行結果:
<__main__.bar object at> klvchen 28 666
建立方法
構造方法: __init__(self, arg)
obj = 類(引數)
普通方法:obj = 類(引數)
obj.普通方法名()
呼叫類中的方法
class foo:
def bar(self):
print('bar')
obj = foo() # 方法一,常用
obj.bar()
obj = foo() # 方法二
foo.bar(obj)
執行結果:
barbar
類中的字段
在類中分為普通欄位和靜態字段:
普通字段:儲存在物件中,執行只能通過物件訪問
靜態字段:儲存在類中,執行可以通過物件訪問,也可以通過類訪問
eg:class province:
country = 'china' # 靜態字段
def __init__(self, name):
self.name = name # 普通字段
print(province.country)
執行結果:
china
類中的三種方法:
1.普通方法:儲存在類中,由物件來呼叫,self 是物件
2.靜態方法:儲存在類中,由類直接呼叫
3.類方法 : 儲存在類中,由類直接呼叫, cls 是當前類
應用場景:
如果物件需要保持一些值,執行某功能時,需要使用物件中的值,選擇 普通方法
不需要任何物件中的值選擇 靜態方法
注:類在記憶體中只儲存乙份,可節省系統的記憶體
eg:class foo:
def bar(self):
print('bar')
@staticmethod # 靜態方法
def sta():
print('static method')
@staticmethod # 靜態方法,帶引數
def sta2(n):
print(n)
foo.sta()
foo.sta2(666)
執行結果:
static method
class foo:
@classmethod
def classmod(cls): # 類方法, cls 是當前類 foo
print(cls)
print('classmethod')
foo.classmod()
執行結果:
classmethod
物件導向三大特性之一: 封裝
eg:class person:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
print('%s %d' %(self.name, self.age))
klvchen = person('陳', 28) # 生成物件時會自動執行 __init__() 方法
klvchen.show()
執行結果:
陳 28
物件導向三大特性之二: 繼承
將多個類共有的方法提取到父類中,子類僅需繼承父類而不必一一實現每個方法。
class father:
pass
class son(father):
pass
eg:class f:
def f1(self):
print('f.f1')
def f2(self):
print('f.f2')
class s(f):
def s1(self):
print('s.s1')
def f2(self):
super(s, self).f2() # 執行父類的 f2 方法
f.f2(self) # 執行父類的 f2 方法
obj = s()
obj.f1()
obj.s1()
obj.f2()
執行結果:
f.f1
s.s1
f.f2
f.f2
python 支援多繼承,規則如下:
1.左側優先
2.一條道做到最後
3.同一根時,根最後執行
eg:class f1:
def f(self):
print('f1.f')
class f2:
def f(self):
print('f2.f')
class s(f1, f2):
pass
obj = s()
obj.f()
執行結果:
f1.f
物件導向三大特性之三: 多型
python 原生就支援多型
新增 @property 後,訪問屬性時可以製造出和訪問字段完全相同的假象
class foo:
def bar(self):
print('bar')
@property
def per(self):
print('123')
return 1
@per.setter
def per(self, val):
print(val)
@per.deleter
def per(self):
print(888)
obj = foo()
r = obj.per
#print(r)
obj.per = 666
del obj.per
執行結果:
class foo:
def f1(self):
return 123
def f2(self, val):
print(val)
def f3(self):
print('del')
per = property(fget=f1, fset=f2, fdel=f3)
obj = foo()
ret = obj.per
print(ret)
obj.per = 6666
del obj.per
執行結果:
del物件後面加 () 直接呼叫__call__方法
class foo:
def __init__(self):
print('init')
def __call__(self, *args, **kwargs):
print('call')
obj = foo()
obj()
執行結果:
init
call
__dict__獲取物件所有的成員,以字典返回
class foo:
def __init__(self, name, age):
self.name = name
self.age = age
obj = foo('klvchen', 28)
d = obj.__dict__
print(d)
執行結果:
總體簡單介紹下python使用 python02
usr bin python coding utf 8 import sys import random 隨機數的產生 num1 random.randrange 1,100,2 print num1 現在隨機產生100個隨機數 arr total 0 for i in range 100 num ...
python類中包含類 徹底搞懂Python中的類
python類的定義 python 中定義乙個類使用 class 關鍵字實現,其基本語法格式如下 class 類名 多個 0 類屬性.多個 0 類方法.注意,無論是類屬性還是類方法,對於類來說,它們都不是必需的,可以有也可以沒有。另外,python 類中屬性和方法所在的位置是任 意的,即它們之間並沒...
python中類的介紹
1 類 class 用來描述具有相同的屬性和方法的物件的集合,它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。類變數 類變數在整個例項化的物件中是公用的。類變數定義在類中且在函式體之外。類變數通常不作為例項變數使用。資料成員 類變數或者例項變數,用於處理類及其例項物件的相關資料。例項變數...