国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python面向?qū)ο缶幊讨嘘P(guān)于類和方法的學(xué)習(xí)筆記

Python面向?qū)ο缶幊讨嘘P(guān)于類和方法的學(xué)習(xí)筆記

2020-08-31 11:03cangmean Python

類與類方法是面向?qū)ο蟮木幊陶Z言中必不可少的特性,本文總結(jié)了Python面向?qū)ο缶幊讨嘘P(guān)于類和方法的學(xué)習(xí)筆記,需要的朋友可以參考下

和實(shí)例
python是一個(gè)面向?qū)ο蟮恼Z言,而面向?qū)ο笞钪匾母拍罹褪穷惡蛯?shí)例, 記得剛學(xué)習(xí)的時(shí)候不太理解這些概念,直到老師說了一句”物以類聚”. 沒錯(cuò)就是類, 歸類

物以類聚

類其實(shí)就是把一些相同特性的事物歸成一類, 比如人

?
1
2
class Person(object):
  pass

我們定義了人這個(gè)類, 但人有一些特性,比如 兩個(gè)眼睛,一個(gè)嘴巴, 我們把這些添加進(jìn)去

?
1
2
3
class Person(object):
  eyes = 2
  mouth = 1

已經(jīng)把人的一些信息寫進(jìn)去了,但是人還有名字, 比如我mink. 好吧我不能虧待自己我得把這些添加進(jìn)去

?
1
2
3
4
class Person(object):
  eyes = 2
  mouth = 1
  name = mink

太完美了,一個(gè)人終于完成了. 上帝用了一天我就用了一分鐘(開個(gè)玩笑), 我們讀一下信息. 人類他有兩個(gè)眼睛,一個(gè)嘴巴,還有名字叫mink. - -! 有點(diǎn)不對(duì),mink是我的名字啊~ 怎么人類叫mink呢
mink是人類的名字, 人類的名字是mink顯然是錯(cuò)誤的, “wo” 應(yīng)該是人類的個(gè)體,是個(gè)單個(gè)例子

?
1
2
3
4
5
6
7
8
class Person(object):
  eyes = 2
  mouth = 1
  
  def __init__(self, name):
    self.name = name
 
me = Person('mink')

現(xiàn)在我終于有了自己的名字而不是給大家共用, 這個(gè)方法叫實(shí)例但是我有一個(gè)別人不會(huì)的技能, 我不受重力影響.

?
1
2
3
4
5
6
7
8
9
10
11
12
class Person(object):
  eyes = 2
  mouth = 1
 
  def __init__(self, name)
    self.name = name
 
  def jineng(self, txt):
    print "%s %s" % (self.name, txt)
 
me = Person('mink')
me.jineng("我不受重力影響, 我會(huì)飛")

類方法和靜態(tài)方法
python中可以經(jīng)常看到@classmethod和@staticmethod, 被稱為類方法和實(shí)例方法.

?
1
2
3
4
5
6
class Animal(object):
  name = 'lili'
  age = 1
 
cat = Animal()
print cat.name, cat.age   # print 'lili' 1

創(chuàng)建了一個(gè)動(dòng)物類, 生成了一個(gè)cat的實(shí)例, 打印cat的名字和年齡, 可以看出返回的是Animal這個(gè)類的屬性, 也就是實(shí)例訪問了類的屬性

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 顯示內(nèi)容是一樣的
print cat.name, cat.age
print Animal.name, Animal.age
給Animal類添加一個(gè)方法(函數(shù))
 
class Animal(object):
  name = 'lili'
  age = 1
 
  def edit(self, name, age):
    self.name = name
    self.age = age
 
cat = Animal()
cat.edit('rol', 2)
 
print cat.name, cat.age     # print 'rol' 2
print Animal.name, Animal.age  # print 'lili' 1

也就是說這個(gè)默認(rèn)添加的方法是一個(gè)實(shí)例的方法, 實(shí)例方法修改了實(shí)例的屬性,而類的屬性不改變

?
1
2
3
4
5
6
7
8
9
10
# 我們修改一下這個(gè)函數(shù)
def edit(self, name, age):
  name = name
  self.age = age
 
cat = Animal()
cat.edit('rol', 2)
 
print cat.name, cat.age     # pirnt 'rol' 2
print Animal.name, cat.age   # print 'lili' 1

說明實(shí)例方法不能修改類的屬性, 但我想修改類的屬性怎么辦

?
1
2
3
4
5
6
7
8
9
10
11
# 再一次修改edit
@classmethod
def edit(cls, name, age):
  cls.name = name
  cls.age = age
 
cat = Animal()
cat.edit('rol', 2)
 
print cat.name, cat.age     # print 'rol' 2
print Animal.name, Animal.age  # print 'rol' 2

這里需要注意的是edit函數(shù)的第一個(gè)參數(shù)有self變?yōu)閏ls, python中建議大家在類的方法中使用cls而實(shí)例方法的參數(shù)為self, 而且這里說明了實(shí)例可以使用類的方法(函數(shù))
那么我在給這個(gè)類添加init方法來初始化屬性

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Animal(object):
  name = 'lili'
  age = 1
 
  def __init__(self, name, age):
    self.name = name
    self.age = age
  ...
 
cat = Animal('kuku', 4)
cat.edit('rol', 2)
 
print cat.name, cat.age     # print 'kuku' 4
print Animal.name, Animal.age  # print 'rol' 2

添加__init__以后, cat不再使用類的屬性,而修改了edit方法也沒有改變cat實(shí)例的屬性.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 添加staticmethod
@staticmethod
def say_name(name=None):
  if not name:
    name = self.name
  print 'my name is %s.' % name
 
cat = Animal('kaka', 3)
cat.say_name()       
# 運(yùn)行的話會(huì)報(bào) NameError: global name 'self' is not defined 
# 那是不是沒給他添加self字段, 所以沒找到
def say_name(self, name=None):
  ...
 
cat.say_name()
# TypeError: say_name() takes at least 1 argument(0 given), 顯示缺少參數(shù)

這說明staticmethod 不能使用實(shí)例的屬性和方法, 當(dāng)然也使用不了類. 那么反過來呢

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 我們修改一下代碼
# 先創(chuàng)建一個(gè)實(shí)例的方法, 他使用類的staticmethod
 
@staticmethod
def say_name(name):
  print 'my name is %s.' % name
 
def say(self):
  self.say_name(self.name)
  
@classmethod
def _say(cls):
  cls.say_name(cls.name)
 
cat = Animal('kaka', 3)
cat.say()
cat._say()

可以通過類方法和實(shí)例方法訪問staticmethod.
總結(jié)一下:
靜態(tài)方法(staticmethod)

  • 靜態(tài)方法不能使用實(shí)例的屬性和方法
  • 靜態(tài)方法不能使用類的屬性和方法
  • 靜態(tài)方法可以通過類或?qū)嵗{(diào)用
  • 靜態(tài)方法等于作用域在類中的全局函數(shù)

類方法(classmethod)

  • 類方法可以使用類的屬性和方法
  • 類的方法可以使用靜態(tài)方法
  • 類的方法可以通過類或?qū)嵗{(diào)用

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美久久久精品 | 免费在线亚洲 | 欧美操操操| 午夜免费视频福利 | 人人人射 | 久久久久九九九九九 | 亚洲一区二区在线 | 成人美女av| 国产成人精品免费视频 | 欧美日韩网站 | 免费久久久久 | 欧美日韩一区二区视频在线观看 | 午夜网| 亚洲另类视频 | 韩日一区 | 国产一区二区三区在线免费观看 | 国产精品成人一区 | 99久久精品免费看国产一区二区三区 | 综合导航 | 午夜影院网站 | 中文字幕 在线观看 | 精品国产乱码久久久久久1区2区 | 51ⅴ精品国产91久久久久久 | 蜜桃视频一区二区三区 | 成人免费在线电影 | 99re免费视频精品全部 | 亚洲精品成人 | 国产一区二区三区视频 | 综合久久99 | 国产精品久久久久久久9999 | 蜜臀网| 九九九九国产 | 黄在线看 | 激情五月婷婷av | 欧美午夜一区 | 欧美在线不卡 | 国产一区欧美 | 成人免费视频网站在线看 | 91污视频 | 黄色网毛片 | 高清在线一区二区 |