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

Python面向?qū)ο蠡A(chǔ)入門之設(shè)置對象屬性

 更新時間:2018年12月11日 09:32:30   作者:駿馬金龍  
這篇文章主要給大家介紹了關(guān)于Python面向?qū)ο蠡A(chǔ)入門之設(shè)置對象屬性的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

前面我們已經(jīng)介紹了 python面向?qū)ο笕腴T教程之從代碼復(fù)用開始(一) ,這篇文章主要介紹的是關(guān)于Python面向?qū)ο笾O(shè)置對象屬性的相關(guān)內(nèi)容,下面話不多說了,來一起看看詳細(xì)的介紹吧

用類存儲數(shù)據(jù)

類實際上就是一個數(shù)據(jù)結(jié)構(gòu),對于python而言,它是一個類似于字典的結(jié)構(gòu)。當(dāng)根據(jù)類創(chuàng)建了對象之后,這個對象就有了一個數(shù)據(jù)結(jié)構(gòu),包含一些賦值了的屬性。在這一點上,它和其它語言的struct的作用是類似的:存儲數(shù)據(jù)并提供數(shù)據(jù)檢索功能。

例如,下面是史上最簡單的類:

class Person: pass

pass關(guān)鍵字表示這個類沒有實際的邏輯體。這里只是定義了一個類,這個類的對象初始化時不會存放任何數(shù)據(jù)?,F(xiàn)在,構(gòu)造一個對象,讓它和dict一樣存放一些數(shù)據(jù):

p = Person() # 構(gòu)造對象
p.name = "longshuai" # 創(chuàng)建對象的屬性name
p.age = 23   # 創(chuàng)建對象的屬性age

現(xiàn)在,Person的實例對象p中就存放了兩個屬性:p.name和p.age。可以直接去檢索存放在p中的數(shù)據(jù):

print(p.name) # 輸出"longshuai"
print(p.age) # 輸出23

也可以使用dict來存儲這些數(shù)據(jù):

>>> d={}
>>> d["name"]="longshuai"
>>> d["age"]=23

>>> print(d["name"])
longshuai
>>> print(d["age"])
23

在數(shù)據(jù)存儲方面,它們的作用是完全等價的。實際上對象/類在內(nèi)部就是使用一個名為__dict__的dict類型來存放它所擁有的數(shù)據(jù)的。

>>> p.__dict__
{'name': 'longshuai', 'age': 23}

__init__()構(gòu)造對象初始數(shù)據(jù)

上面的name和age屬性是在構(gòu)建了對象之后附加上去的,如果想要創(chuàng)建對象時就存放好數(shù)據(jù),可以定義類的構(gòu)造函數(shù)__init__()。例如:

class Person:
 def __init__(self,name,age):
  self.name = name
  self.age = age

然后創(chuàng)建對象的時候,傳遞name參數(shù)和age參數(shù)即可。

>>> p = Person("longshuai",23)
>>> p.__dict__
{'name': 'longshuai', 'age': 23}

如果想定義這個類公有的數(shù)據(jù),可以將公有屬性定義為類的屬性。比如中國人都是黃皮膚:

class Person:
 skin = "yellow"
 def __init__(self,name,age):
  self.name = name
  self.age = age

這樣每次創(chuàng)建Person的對象實例時,每個對象都會有相同的膚色:yellow。但注意,這個skin屬性是類屬性,不是對象屬性,它是存放在類的名稱空間中的。當(dāng)對象真的需要這個屬性的時候,會臨時去檢索類的名稱空間來獲取。看下面的__dict__字典即可知道:

>>> p = Person("longshuai",23)
>>> p.__dict__
{'name': 'longshuai', 'age': 23}
>>> p.skin
'yellow'

但注意,按照面向?qū)ο蟮姆庋b原則,在類中定義類變量屬性是不合理的,因為要在外部訪問它需要通過x.y的方式,這意味著打開了封裝好的"黑匣子",暴露了屬性。除非真的有需要,否則可以將類變量的定義放進構(gòu)造函數(shù)__init__()中,這樣每個初始化的對象都會有該屬性。

setter和getter方法

在面向?qū)ο蟮慕嵌壬峡紤],一般是不建議直接在類的外部通過x.name的方式賦值、取值的。而是定義對應(yīng)的方法,通過方法來取得對應(yīng)的值。這兩類方法稱為setter、getter方法:setter用于賦值或設(shè)置屬性值,getter用于取得屬性值。

class Person:
 skin = "yellow"
 def __init__(self,name,age):
  self.name = name
  self.age = age
 def set(self,job):
  self.job = job
  return self
 def get(self):
  return self.name,self.age,self.job

上面的set方法用于設(shè)置一個新屬性job。get用于返回對象的3個屬性。

>>> p = Person("longshuai",23)
>>> p.set("manager")
>>> name, age, job = p.get()
>>> print([name,age,job])
['longshuai', 23, 'manager']

需要注意,setter方法可以有多種類型的返回值,常用的有4種:

  • 返回設(shè)置后的值
  • 返回設(shè)置前的值
  • 返回對象自身
  • 返回布爾值,表示是否設(shè)置成功

這4種返回值都很常見,特別是第三種用來串聯(lián)對象方法的時候非常好用。修改上面的set方法:

class Person:
 skin = "yellow"
 def __init__(self,name,age):
  self.name = name
  self.age = age
 def set(self,job):
  self.job = job
  return self
 def get(self):
  return self.name,self.age,self.job

上面的set()返回self對象自身。于是串聯(lián)set()和get():

>>> p = Person("longshuai",23)
>>> name,age,job = p.set("manager").get()

無論使用何種返回值方式,都不會真正影響程序的使用。但使用合理的返回值類型,可能會簡化代碼的編寫。另外,決定了返回值的方式后,就不要再去修改,因為很可能會牽一發(fā)而動全身。

上面的getter返回了多個值,但一般來說getter只返回一個對應(yīng)的屬性。比如getname()返回name屬性,getage()返回age屬性等。這樣需要定義多個getter方法。

def get_name(self):
 return self.name

def get_age(self):
 return self.age

def get_job(self):
 return self.job

合并setter和getter

很多時候可以合并setter和getter方法。合并的方式是判斷方法的參數(shù),如果調(diào)用方法的時候給了參數(shù),就表示setter,沒有給定參數(shù),就表示是getter。

例如,對于job屬性:

def set_get_job(self, job=None):
 if job:
  self.job = job
 else:
  return self.job

現(xiàn)在可以以給參數(shù)和不給參數(shù)兩種不同的方式來調(diào)用set_get_job()方法:

p = Person("longshuai", 23)
p.set_get_job("manager")  # 給了參數(shù),說明是setter
job = p.set_get_job()  # 沒給參數(shù),說明是getter

總結(jié)

本文介紹了各種設(shè)置對象屬性的方式,屬性其實就是數(shù)據(jù),對象/類就是屬性的容器,這一點很重要。我最開始學(xué)java的面向?qū)ο髸r,雖然對類和對象有那些教科書式的理解,但始終沒有感受到類/對象其實就是一種用來存儲數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。直到學(xué)習(xí)了Python/Perl,我才意識到這一點,然后理解面向?qū)ο缶腿菀椎亩嗔恕?/p>

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 使用Python設(shè)置tmpfs來加速項目的教程

    使用Python設(shè)置tmpfs來加速項目的教程

    這篇文章主要介紹了使用Python設(shè)置tmpfs來加速項目的教程,文中給出方法使用Python腳本將tmpfs保存于內(nèi)存中的程序存儲到本地硬盤上,需要的朋友可以參考下
    2015-04-04
  • python刪除某個目錄文件夾的方法

    python刪除某個目錄文件夾的方法

    在本篇文章里小編給大家分享的是關(guān)于python刪除某個目錄文件夾的方法,有興趣的朋友們可以學(xué)習(xí)下。
    2020-05-05
  • PyCharm 配置遠程python解釋器和在本地修改服務(wù)器代碼

    PyCharm 配置遠程python解釋器和在本地修改服務(wù)器代碼

    這篇文章主要介紹了PyCharm 配置遠程python解釋器和在本地修改服務(wù)器代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 詳解詳解Python中writelines()方法的使用

    詳解詳解Python中writelines()方法的使用

    這篇文章主要介紹了詳解詳解Python中writelines()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Python 常用string函數(shù)詳解

    Python 常用string函數(shù)詳解

    下面小編就為大家?guī)硪黄狿ython 常用string函數(shù)詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • Python利用Beautiful Soup模塊搜索內(nèi)容詳解

    Python利用Beautiful Soup模塊搜索內(nèi)容詳解

    這篇文章主要給大家介紹了python中 Beautiful Soup 模塊的搜索方法函數(shù)。 方法不同類型的過濾參數(shù)能夠進行不同的過濾,得到想要的結(jié)果。文中介紹的非常詳細(xì),對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Python使用signal定時結(jié)束AsyncIOScheduler任務(wù)的問題

    Python使用signal定時結(jié)束AsyncIOScheduler任務(wù)的問題

    這篇文章主要介紹了Python使用signal定時結(jié)束AsyncIOScheduler任務(wù),在使用aiohttp結(jié)合apscheduler的AsyncIOScheduler模擬定點并發(fā)的時候遇到兩個問題,針對每個問題給大家詳細(xì)介紹,需要的朋友可以參考下
    2021-07-07
  • 利用python繪制CDF圖的示例代碼

    利用python繪制CDF圖的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用python實現(xiàn)繪制CDF圖,文中的示例代碼簡潔易懂,具有一定的借鑒價值,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-08-08
  • python模擬登錄并且保持cookie的方法詳解

    python模擬登錄并且保持cookie的方法詳解

    模擬登錄相信對大家來說都不陌生,下面這篇文章主要給大家介紹了關(guān)于python模擬登錄并且保持cookie的方法,文中介紹的非常詳細(xì),對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • python re正則表達式模塊(Regular Expression)

    python re正則表達式模塊(Regular Expression)

    Python 的 re 模塊(Regular Expression 正則表達式)提供各種正則表達式的匹配操作,在文本解析、復(fù)雜字符串分析和信息提取時是一個非常有用的工具.
    2014-07-07

最新評論

封开县| 樟树市| 冷水江市| 连云港市| 大港区| 邮箱| 左贡县| 睢宁县| 宜州市| 江都市| 双城市| 邢台县| 阳曲县| 交城县| 连州市| 白玉县| 陕西省| 陕西省| 志丹县| 千阳县| 东乡族自治县| 延安市| 龙胜| 三原县| 孟津县| 乌鲁木齐市| 佛山市| SHOW| 宣城市| 石城县| 开封市| 乌什县| 田东县| 北安市| 察雅县| 福贡县| 兰坪| 工布江达县| 东方市| 尚义县| 元江|