最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python面向?qū)ο缶幊讨嘘P于類和方法的學習筆記

 更新時間:2016年06月30日 18:56:49   作者:cangmean  
類與類方法是面向?qū)ο蟮木幊陶Z言中必不可少的特性,本文總結(jié)了Python面向?qū)ο缶幊讨嘘P于類和方法的學習筆記,需要的朋友可以參考下

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

物以類聚

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

class Person(object):
  pass

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

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

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

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

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

class Person(object):
  eyes = 2
  mouth = 1
  
  def __init__(self, name):
    self.name = name 

me = Person('mink')

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

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("我不受重力影響, 我會飛")

類方法和靜態(tài)方法
python中可以經(jīng)??吹紷classmethod和@staticmethod, 被稱為類方法和實例方法.

class Animal(object):
  name = 'lili'
  age = 1

cat = Animal()
print cat.name, cat.age   # print 'lili' 1

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

# 顯示內(nèi)容是一樣的
print cat.name, cat.age
print Animal.name, Animal.age
給Animal類添加一個方法(函數(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

也就是說這個默認添加的方法是一個實例的方法, 實例方法修改了實例的屬性,而類的屬性不改變

# 我們修改一下這個函數(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

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

# 再一次修改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ù)的第一個參數(shù)有self變?yōu)閏ls, python中建議大家在類的方法中使用cls而實例方法的參數(shù)為self, 而且這里說明了實例可以使用類的方法(函數(shù))
那么我在給這個類添加init方法來初始化屬性

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實例的屬性.

# 添加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()        
# 運行的話會報 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 不能使用實例的屬性和方法, 當然也使用不了類. 那么反過來呢

# 我們修改一下代碼
# 先創(chuàng)建一個實例的方法, 他使用類的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()

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

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

類方法(classmethod)

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

相關文章

  • python3 正則表達式基礎廖雪峰

    python3 正則表達式基礎廖雪峰

    正則表達式是一種用來匹配字符串的強有力的武器。它的設計思想是用一種描述性的語言來給字符串定義一個規(guī)則,凡是符合規(guī)則的字符串,我們就認為它“匹配”了,否則,該字符串就是不合法的
    2020-03-03
  • pymysql 插入數(shù)據(jù) 轉(zhuǎn)義處理方式

    pymysql 插入數(shù)據(jù) 轉(zhuǎn)義處理方式

    今天小編就為大家分享一篇pymysql 插入數(shù)據(jù) 轉(zhuǎn)義處理方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 在Python中利用Pandas庫處理大數(shù)據(jù)的簡單介紹

    在Python中利用Pandas庫處理大數(shù)據(jù)的簡單介紹

    這篇文章簡單介紹了在Python中利用Pandas處理大數(shù)據(jù)的過程,Pandas庫的使用能夠很好地展現(xiàn)數(shù)據(jù)結(jié)構,是近來Python項目中經(jīng)常被使用使用的熱門技術,需要的朋友可以參考下
    2015-04-04
  • Python 自由定制表格的實現(xiàn)示例

    Python 自由定制表格的實現(xiàn)示例

    這篇文章主要介紹了Python 自由定制表格的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • python實現(xiàn)數(shù)據(jù)挖掘中分箱的示例代碼

    python實現(xiàn)數(shù)據(jù)挖掘中分箱的示例代碼

    數(shù)據(jù)分箱(英語:Data?binning)是一種數(shù)據(jù)預處理方法,用于最大限度地減少小觀測誤差的影響,本文主要為大家介紹了python實現(xiàn)數(shù)據(jù)分箱的相關知識,感興趣的可以了解下
    2024-01-01
  • aws 通過boto3 python腳本打pach的實現(xiàn)方法

    aws 通過boto3 python腳本打pach的實現(xiàn)方法

    這篇文章主要介紹了aws 通過boto3 python腳本打pach的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 一篇文章弄懂Python中所有數(shù)組數(shù)據(jù)類型

    一篇文章弄懂Python中所有數(shù)組數(shù)據(jù)類型

    這篇文章主要給大家介紹了關于Python中所有數(shù)組數(shù)據(jù)類型的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • ?python 中的條件判斷語句的使用介紹

    ?python 中的條件判斷語句的使用介紹

    這篇文章主要介紹了?python 中的條件判斷語句的使用,主要學習內(nèi)容有封裝過于復雜的邏輯判斷,不同分支下的重復代碼等,更多相關內(nèi)容,需要的小伙伴可以參考下面文章詳細介紹內(nèi)容
    2022-03-03
  • 使用PDB模式調(diào)試Python程序介紹

    使用PDB模式調(diào)試Python程序介紹

    這篇文章主要介紹了使用PDB模式調(diào)試Python程序介紹,本文講解了PDB模式的使用語法,著重講解PDB模式下的常用命令,需要的朋友可以參考下
    2015-04-04
  • django之使用celery-把耗時程序放到celery里面執(zhí)行的方法

    django之使用celery-把耗時程序放到celery里面執(zhí)行的方法

    今天小編就為大家分享一篇django之使用celery-把耗時程序放到celery里面執(zhí)行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論

江城| 梁平县| 怀化市| 延长县| 涞源县| 隆化县| 长泰县| 富平县| 永平县| 理塘县| 灵璧县| 会宁县| 巩留县| 遂溪县| 梁山县| 桦南县| 武宣县| 辉县市| 阜平县| 四川省| 江华| 广汉市| 容城县| 兰考县| 历史| 中山市| 东丰县| 江陵县| 秦皇岛市| 辰溪县| 灵川县| 集安市| 铁岭县| 沙湾县| 万荣县| 太和县| 安多县| 长乐市| 清丰县| 芦溪县| 贺州市|