生活随笔
收集整理的這篇文章主要介紹了
python类
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一,類
1,類是摸板,里面有組合數(shù)據(jù),實(shí)現(xiàn)功能的方法。
2,類里面有可以改變自身的方法__init__函數(shù)
3,類和模塊類似,運(yùn)行時(shí)創(chuàng)建,創(chuàng)建后修改
4,類成員通常是public,成員函數(shù)virtual
5,python提供的內(nèi)置類型類,可以作為父類來繼承
二,類為模板
1,屬性引用
Moduel_Name.func_name 對(duì)模塊中名稱的引用稱為屬性引用。
Moduel_Name 是一個(gè)模塊對(duì)象,fun_name是它的屬性。
模塊的屬性和模塊中定義的全局名稱之間存在映射關(guān)系:它們共享一個(gè)命名空間!
2 ,屬性
可以只讀或者只寫,如果可寫,模塊的屬性可以賦值,可以刪除
Moduel_Name.var = 10
del Moduel_Name.var 會(huì)從Moduel_Name對(duì)象中移除var屬性
3,類里面定義的變量
>>> class MyClass:... def say_hello(): ... print('hello world!')...>>> MyClass
<class '__main__.MyClass'>>>> MyClass
.say_hello
() hello world!
>>>
類里面函數(shù)可能還有self 的參數(shù)
一個(gè)類(全局命名空間)里面的作用域是局部作用域
通過創(chuàng)建對(duì)象使得類里面的局部作用域生效
class MyClass:''' 這是一個(gè)py類的annotation '''i
= 99def __init__(self
):self
.data
= []def say_hello(self
):return 'hello world'
4,類對(duì)象
MyClass
.var
- 實(shí)例化
類的實(shí)例使用函數(shù)表示法
x
= MyClass
()
class Test:def __init__(self
):print('這是py類的構(gòu)造方法,用來初始化這個(gè)類')def __init__(self
, name
):print(name
)''' 當(dāng)一個(gè)類定義了 __init__() 方法時(shí),類的實(shí)例化操作(t = Test('rye'))自動(dòng)為新創(chuàng)建的類實(shí)例發(fā)起調(diào)用 __init__()。兩個(gè)init會(huì)被調(diào)用。只是第一個(gè)__init__會(huì)被覆蓋。'''
- init里面的局部名稱屬于實(shí)例對(duì)象
class MyClass:''' 這是一個(gè)py類 有兩個(gè)init初始化類的方法,創(chuàng)建類后所有init里面的局部變量就會(huì)存在__init__self后面參數(shù)沒被賦值就是None'''i
= 99def __init__(self
):self
.data
= []def __init__(self
, count
): self
.c
= count
def say_hello(self
):return 'hello world''''
MyClass.c 這樣訪問時(shí)錯(cuò)誤的,c輸入實(shí)例對(duì)象。
'''
5,實(shí)例對(duì)象 ==> 自定義對(duì)象產(chǎn)生的
- 實(shí)例對(duì)象的操作是屬性引用(數(shù)據(jù)屬性和方法)
- 數(shù)據(jù)屬性不需要在類里面聲明,像局部變量一樣,第一次賦值時(shí)產(chǎn)生。
- 數(shù)據(jù)屬性可以根據(jù)類對(duì)象無中生有
- counter就是實(shí)例對(duì)象的屬性引用
me
= MyClass
(None)
def my_obj():me
.counter
= 0while me
.counter
< 20:me
.counter
+= 1print(me
.counter
)my_obj
()
- 實(shí)例方法,是類對(duì)象調(diào)用類的函數(shù)
Me
= MyClass
(None)Me
.say_hello
() 就是一個(gè)方法對(duì)象而MyClass
.say_hello
(None) 就是一個(gè)函數(shù)對(duì)象
6, 方法對(duì)象
me
= MyClass
(None)
def test_func_obj():val
= me
.say_hello
() while True:print(val
) test_func_obj
()print("me.say_hello()相當(dāng)于 MyClass.say_hello(me)")
?注意
- 方法的特殊之處就在于實(shí)例對(duì)象會(huì)作為函數(shù)的第一個(gè)參數(shù)被傳入。 實(shí)例對(duì)象取代了self。
- 總之,調(diào)用一個(gè)具有 n 個(gè)參數(shù)的方法就相當(dāng)于調(diào)用再多一個(gè)參數(shù)的對(duì)應(yīng)函數(shù), 這個(gè)參數(shù)值為方法所屬實(shí)例對(duì)象,位置在其他參數(shù)之前。
7,類和實(shí)例變量
- 類對(duì)象的屬性,函數(shù)屬于所有對(duì)象 self屬于某個(gè)對(duì)象。
class Dog:name
= 'kid'def __init__(self
, color
):self
.color
= color
d1
= Dog
('black')
d2
= Dog
('yellow')
print(d1
.name
, d1
.color
, '\n', d2
.name
, d2
.color
)
'''
kid blackkid yellow
'''d1
.name
= 'jack'
print(d1
.name
, d1
.color
, '\n', d2
.name
, d2
.color
)
'''
改變類變量后,
jack black kid yellow
'''
class Dog:tricks
= []def __init__(self
, name
):self
.name
= name
def add_trick(self
, trick
):self
.tricks
.append
(trick
)d
= Dog
('d1')
dd
= Dog
('d2')
d
.add_trick
('jump!')
dd
.add_trick
('roll!')
print(d
.tricks
)
print(dd
.tricks
)
''' ['jump!', 'roll!'] 兩只狗都會(huì)了['jump!', 'roll!']
'''
class Dog():def __init__(self
, name
):self
.name
= nameself
.tricks
= [] def add_trick(self
, trick
):self
.tricks
.append
(trick
)d
= Dog
('d1')
dd
= Dog
('d2')
d
.add_trick
('jump!')
dd
.add_trick
('roll!')
print(d
.tricks
)
print(dd
.tricks
)
'''
['jump!']
['roll!']
'''
有點(diǎn)懵,但還好,會(huì)用了。
總結(jié)
以上是生活随笔為你收集整理的python类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。