欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python創(chuàng)建Getter和Setter的方法詳解

 更新時間:2023年10月20日 09:39:53   作者:跡憶客  
Getters?和?Setters?是幫助我們設置類變量或屬性而無需直接訪問的方法,這篇文章主要和大家介紹了如何在Python中創(chuàng)建Getter和Setter,需要的可以參考下

面向對象編程(OOP)是一種編程范式,它使很多事情變得容易,從可組合性到繼承,并允許我們更快地構建功能和程序部件。 這個范式有不同的特點; 兩個是 getter 和 setter。

類是 OOP 的基礎,通常具有每個實例唯一的變量,并且這些變量(通常稱為屬性)通過方法設置或獲取。 這些方法稱為 getter 和 setter。

這些行為在支持 OOP 的編程語言中很流行,Python 也支持它。 本文將討論如何在 Python 中創(chuàng)建 getter 和 setter。

Python 中的 Getter 和 Setter

Getters 和 Setters 是幫助我們設置類變量或屬性而無需直接訪問的方法,違背了抽象和封裝的目的。 因此,通過 getter 和 setter,我們就能夠處理類屬性。

在我們創(chuàng)建 getter 和 setter 之前,重要的是要知道,與其他編程語言不同,Python 沒有隱藏字段,因此您可以通過點表示法直接訪問類中的變量。

我們可以使用普通函數(shù)、property() 函數(shù)和 @property 裝飾器來實現(xiàn) getter 和 setter。

在 Python 中使用函數(shù)創(chuàng)建 Getter 和 Setter

稱為方法的典型類函數(shù)對于創(chuàng)建 getter 和 setter 非常有用,我們可以使用 self 概念輕松地設置它們。

該方法為 getter 返回屬性,對于 setter,該方法將參數(shù)綁定到屬性。 為了進行演示,我們將使用一個擁有位置屬性的 Employee、名為 getPosition 的 getter 方法和名為 setPosition 的 setter 方法。

class Employee:
    def __init__(self) -> None:
        self.position = None

    def getPosition(self):
        return self.position

    def setPosition(self, position):
        self.position = position

Jacob = Employee()
Jinku = Employee()

Jacob.setPosition("Engineer II")
Jinku.setPosition("Senior Engineer")

print(Jacob.position)
print(Jinku.getPosition())

輸出:

Engineer II
Senior Engineer

但是,這種設置或方法沒有太多特殊行為。

在Python中使用property()函數(shù)創(chuàng)建Getter和Setter

為了獲得一些特殊的行為,我們可以使用 property() 函數(shù)來創(chuàng)建并返回一個屬性對象,該對象包含三個方法:getter() 、setter() 和 delete()。

它有助于提供實例屬性的接口。 此功能使我們能夠輕松創(chuàng)建所有 getter 和 setter 功能。

要使用 property() 函數(shù),我們需要設置四個參數(shù)值,它們是使 property() 成為高階函數(shù)的函數(shù)。

getter、setter 和 delete 方法是它的參數(shù)(都是可選的),并且它返回屬性對象。

property(fget, fset, fdel, doc)

讓我們在 OOP 代碼中使用 property() 函數(shù)。

class Employee:
    def __init__(self):
        self.position = None

    def getPosition(self):
        return self.position

    def setPosition(self, position):
        self.position = position

    pos = property(getPosition, setPosition)

Jacob = Employee()
Jinku = Employee()

Jacob.position = "Engineer II"
Jinku.position = "Senior Engineer"

print(Jacob.position)
print(Jinku.position)

輸出:

Engineer II
Senior Engineer

隨著 property() 函數(shù)的引入,我們有了 pos 綁定,它保存屬性對象,有助于保持對私有屬性的安全訪問。

使用@property裝飾器在Python中創(chuàng)建Getter和Setter

我們可以使用 @property 裝飾器來實現(xiàn) property() 函數(shù),這樣就不需要在我們的方法中使用 get 和 set 名稱了。

使用 @property 裝飾器,我們可以重用定義 getter 和 setter 函數(shù)的位置名稱。

使用 @property,我們創(chuàng)建 getter,使用 @position.setter,我們創(chuàng)建 setter,這通過添加到代碼中并在輸出中可見的 print 語句顯而易見。

class Employee:
    def __init__(self):
        self.position = None

    @property
    def position(self):
        print("Get Employee Position: ")
        return self._position

    @position.setter
    def position(self, value):
        print("Set Position")
        self._position = value

Jacob = Employee()
Jinku = Employee()

Jacob.position = "Engineer II"
Jinku.position = "Senior Engineer"

print(Jacob.position)
print(Jinku.position)

輸出:

Set Position
Set Position
Set Position
Set Position
Get Employee Position:
Engineer II
Get Employee Position:
Senior Engineer

Set Position 有四種,因為 __init__ 方法在調用類實例時設置了初始位置屬性,從而導致了前兩種。 當我們將值設置為接下來兩個的相應值時,它會再次打印。

對于getter,它在獲取屬性值時打印語句Get Employee Position,并且getter只被調用兩次。 于是就有了這兩種說法。

當我們使用 setter 方法時,我們可以向 OOP 代碼添加驗證。

class Employee:
    def __init__(self):
        self.position = None

    @property
    def position(self):
        print("Get Employee Position: ")
        return self._position

    @position.setter
    def position(self, value):
        print("Set Position")
        if (value != None and len(value) <= 2):
            raise ValueError("Position name is less than two and is deemed invalid")
        self._position = value

Jacob = Employee()
Jinku = Employee()

Jacob.position = "OS"
Jinku.position = "Senior Engineer"

print(Jacob.position)
print(Jinku.position)

輸出:

Set Position
Set Position
Set Position
Traceback (most recent call last):
  File "c:\Users\akinl\Documents\Python\getterSetter.py", line 20, in <module>
    Jacob.position = "OS"
  File "c:\Users\akinl\Documents\Python\getterSetter.py", line 14, in position
    raise ValueError("Position name is less than two and is deemed invalid")
ValueError: Position name is less than two and is deemed invalid

到此這篇關于Python創(chuàng)建Getter和Setter的方法詳解的文章就介紹到這了,更多相關python創(chuàng)建Getter和Setter內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用Python實現(xiàn)XLS和XLSX之間的相互轉換

    使用Python實現(xiàn)XLS和XLSX之間的相互轉換

    在日常工作中,我們經常需要處理和轉換不同格式的Excel文件,以適應不同的需求和軟件兼容性,Excel文件的兩種常見格式是XLS(Excel 97-2003)和XLSX(Excel 2007及以上版本),本文將詳細介紹如何使用Python在XLS和XLSX格式之間進行轉換,需要的朋友可以參考下
    2024-09-09
  • OpenCV半小時掌握基本操作之濾波器

    OpenCV半小時掌握基本操作之濾波器

    這篇文章主要介紹了OpenCV基本操作之濾波器,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Python移位密碼、仿射變換解密實例代碼

    Python移位密碼、仿射變換解密實例代碼

    凱撒密碼(Caesar 密碼)是最早的代換密碼,也是古典對稱密碼體制的典型代表,已經初步體現(xiàn)出近代密碼系統(tǒng)的雛形,這篇文章主要給大家介紹了關于Python移位密碼、仿射變換解密的相關資料,需要的朋友可以參考下
    2021-06-06
  • 使用Protocol Buffers的C語言拓展提速Python程序的示例

    使用Protocol Buffers的C語言拓展提速Python程序的示例

    這篇文章主要介紹了使用Protocol Buffers的C語言拓展提速Python程序的示例,使用C拓展Python是Python編程進階中的重要技巧,需要的朋友可以參考下
    2015-04-04
  • Python arrow模塊使用方法

    Python arrow模塊使用方法

    Arrow 是用于處理日期和時間的 Python 模塊。 與內置的日期和時間工具相比,它使創(chuàng)建,操作,格式化和轉換日期,時間和時間戳變得更加容易
    2022-10-10
  • Python中的urllib庫高級用法教程

    Python中的urllib庫高級用法教程

    這篇文章主要介紹了Python中的urllib庫高級用法教程,想要請求需要設置一些請求頭,如果要在請求的時候增加一些請求頭,那么就必須使用request.Request類來實現(xiàn)了,比如要增加一個 User-Agent ,增加一個 Referer 頭信息等,需要的朋友可以參考下
    2023-10-10
  • Python網絡爬蟲與信息提取(實例講解)

    Python網絡爬蟲與信息提取(實例講解)

    下面小編就為大家?guī)硪黄狿ython網絡爬蟲與信息提取(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Python序列操作之進階篇

    Python序列操作之進階篇

    序列sequence是python中最基本的數(shù)據(jù)結構,本文是Python序列操作的進階篇,本文先對序列做一個簡單的概括,之后將詳細講解下關于序列的操作方法。文中通過示例代碼介紹的很詳細,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • python腳本實現(xiàn)音頻m4a格式轉成MP3格式的實例代碼

    python腳本實現(xiàn)音頻m4a格式轉成MP3格式的實例代碼

    這篇文章主要介紹了python腳本實現(xiàn)音頻m4a格式轉成MP3格式的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • pytorch自定義二值化網絡層方式

    pytorch自定義二值化網絡層方式

    今天小編就為大家分享一篇pytorch自定義二值化網絡層方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評論