1. 程式人生 > >Python面向物件4:屬性、成員修飾符

Python面向物件4:屬性、成員修飾符

1、屬性:

[email protected]的函式,具有屬性,可以直接取值。屬性具有方法的寫作形式,同時具有欄位的訪問形式,訪問時不需要加()。

案例1:不加屬性的呼叫普通方法,需要方法+()

class pager:
def __init__(self,totalcnt):
self.totalcnt=totalcnt

def allpage(self):#普通方法#10個一分頁
       
a1,a2=divmod(self.totalcnt,10)
if a2==0:
return a1
else:
t=a1+1
       
return str(t)
#建立物件並執行
obj=pager(95
)
print('呼叫普通欄位,總頁數:',obj.totalcnt)
print('呼叫普通方法,分頁數:',obj.allpage())#方法+()

執行結果:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

案例2:加屬性的呼叫,只需要方法即可,不需要()

class pager:
def __init__(self,totalcnt):
self.totalcnt=totalcnt

@property  # 加屬性
   
def allpage(self):
a1,a2=divmod(self.totalcnt,10)
if a2==0:
return a1
else:
t=a1+1
       
return str(t)
#建立物件並執行
obj=pager(95)
print('呼叫普通欄位,總頁數:',obj.totalcnt)
print('呼叫屬性的方式,分頁數:',obj.allpage)#此處無方法+()

執行結果:

0?wx_fmt=png

案例3:如果要更改賦值,比如設定新的數,或者執行刪除方法,需要使用其他的裝飾器。

  • 函式名+setter,重新設定新的值

  • 函式名+deleter,可以設定成刪除方法,並不一定是真的刪除,也可以偽造成其他的方法

class pager:
def __init__(self,totalcnt):
self.totalcnt=totalcnt

@property # 加屬性,取值
   
def all_pager(self):#10個一分頁
       
a1,a2=divmod(self.totalcnt,10)
if a2==0:
return a1
else:
return a1+1
 
@all_pager.setter#重新設定新的值,格式為原方法+setter
   
def all_pager(self,value):
print("重新設定")

@all_pager.deleter #刪除,格式為原方法+deleter
   
def all_pager(self):
print("del value")

#例項化
obj=pager(95)
print('-------使用屬性直接取值---------')
print(obj.all_pager)#此處無方法+()
print('-------設定新的值---------')
obj.totalcnt=113#修改一下值,使用allpage.setter
print(obj.all_pager)#列印新的值
print('-------可以刪除,也可以偽造成其他的形式,比如列印---------')
del obj.all_pager

執行結果:

0?wx_fmt=png

2、成員修飾符

成員修飾符,公有的、私有的。私有的只能在內部訪問,外部無法訪問。

類成員有:欄位、方法、屬性;

案例1:公有欄位的訪問途徑:一是直接列印欄位,一是通過方法。

class c1:
def __init__(self,name):
self.name=name
def f1(self):
print(self.name)

obj=c1('hh')
print('途徑1,直接列印name:',obj.name)
print('途徑22,通過方法實現列印name')
obj.f1()

執行結果:

0?wx_fmt=png

案例2:建立類中的私有動態欄位;

  • 欄位前加兩個下劃線,比如__XXX,表示的是私有型別(private)的變數;

  • 訪問時,只能通過方法訪問

  • 私有欄位只能允許這個類本身進行訪問, 連子類也不可以。

class foo:
def __init__(self,value):
self.__value=value#私有欄位

   
def f1(self):#10個一分頁
       
print(self.__value)
#定義物件
obj=foo(95)
#訪問私有欄位
obj.f1()#可以通過方法呼叫
  • 但不能像公有欄位一樣,通過print(obj.value)訪問

  • 如果實在想強制訪問,也可用print(obj._foo__value),類名前面死一個下劃線,欄位名前是倆下劃線,下劃線為英文狀態的。

  • 即使繼承也無法訪問,比如obj.f2()是不能訪問下面的例子的

class foo:
def __init__(self,value):
self.__value=value

def f1(self):#10個一分頁
       
print(self.__value)
class bar(foo):#整合foo類,
   
def f2(self):
print(self.__value)#無法繼承foo的私有欄位
obj=bar(95)#建立物件
obj.f1()#可以通過方法呼叫,而不能通過obj.f2()訪問

案例3:建立類中的私有靜態欄位。

  • 可以通過物件的方法訪問

class foo:
__coo="gtt"#靜態私有欄位
   
def __init__(self,value):
self.__value=value

def f1(self):print(self.__value)

def f2(self):
print(foo.__coo)#靜態私有欄位
obj=foo("123")
obj.f2()#通過普通方法訪問
  • 通過靜態方法訪問

class foo:
__coo="gtt"#靜態私有欄位
   
def __init__(self,value):
self.__value=value

def f1(self):
print(self.__value)
@staticmethod
   
def f2():
print(foo.__coo)#靜態私有欄位
foo.f2()

案例4:受保護的變數

    _xxx,單下劃線開頭的變數,標明是一個受保護(protected)的變數,原則上不允許直接訪問,但外部類還是可以訪問到這個變數。這只是程式設計師之間的一個約定,用於警告說明這是一個私有變數,外部類不要去訪問它。

class Student:
def __init__(self, name, age):
self._name = name#一個下劃線定義
self.age=age

stu=Student('hh','30')#例項化
print(stu._name)#受保護的變數訪問
print(stu.age)

執行結果:

0?wx_fmt=png

案例連結:https://pan.baidu.com/s/1miGcPRE 密碼:uwi8

相關推薦

python 面向物件程式設計類和例項

深度學習在構建網路模型時,看到用類來構建一個模型例項,清晰明瞭,所以這篇博文主要學習一下python類 類和例項: 類可以起到模板的作用,因此,可以在建立例項的時候,把一些我們認為必須繫結的屬性強制填寫進去。通過定義一個特殊的__init__(注意:特殊方法“__init__”前後分別有

Python基礎(三)--- Python面向物件oop,類方法和變數,繼承

一、面向物件oop ----------------------------------------------------- 1.類 用來描述具有相同的屬性和方法的物件的集合。 它定義了該集合中每個物件所共有的屬性和方法。 物件是類的例項。

6.3 SAP ABAP 開放封閉原則(OCP)- 摘自 《SAP ABAP面向物件程式設計原則模式及實踐》 6.3 SAP ABAP 開放封閉原則(OCP)- 摘自 《SAP ABAP面向物件程式設計原則模式及實踐》

6.3 SAP ABAP 開放封閉原則(OCP)- 摘自 《SAP ABAP面向物件程式設計:原則、模式及實踐》   6.3 開放封閉原則(OCP) 開閉原則(Open-Closed Principle, OCP)指的是,一個類或者模組,如果在業務修改或者功能需要擴充套

2.4 面向物件4介面與實現

@介面與實現 介面定義了一組共性 這些共性體現為介面的抽象方法 抽象方法就是隻有方法定義,沒有方法實現的方法 接口裡有且只有抽象方法 介面可以有多種不同的具體子類實現 介面的作用是為子類實現提供統一的API

Python面向物件基礎編碼細節和注意事項!

在前面,我用了3篇文章解釋python的面向物件: 面向物件:從程式碼複用開始 面向物件:設定物件屬性 類和物件的名稱空間 本篇是第4篇,用一個完整的示例來解釋面向物件的一些細節。 例子的模型是父類Employe和子類Manager,從類的定義開始,一步步完善直到類

python面向物件入門從程式碼複用開始

本文從程式碼複用的角度一步一步演示如何從python普通程式碼進化到面向物件,並通過程式碼去解釋一些面向物件的理論。所以,本文前面的內容都是非面向物件的語法實現方式,只有在最結尾才給出了面向物件的簡單語法介紹。各位道兄不妨一看,如果留下點筆墨指導,本人感激不盡。 最初程式碼 3種動物牛Cow、羊Sheep、

Python面向物件1基礎介紹+封裝特徵

目前有三種程式設計方式:面向過程:根據業務邏輯從上到下寫壘程式碼函式式:將某功能程

Python面向物件06-私有屬性和私有方法

私有屬性和私有方法 01. 應用場景及定義方式 應用場景 在實際開發中,物件 的 某些屬性或方法 可能只希望 在物件的內部被使用,而 不希望在外部被訪問到 私有屬性 就是 物件 不希望公開的 屬性 私有方法 就是 物件 不希望公開的 方法 定義方式 在 定義屬性或

二十面向物件2— 隱藏屬性私有屬性私有方法__del__ 等四種如何使用測量物件的引用個數

一、隱藏屬性 在一個方法裡面去規範傳遞的屬性值。(更安全),為每一個屬性新增set   get 方法 二、私有屬性 1、在外部使用私有成員的名字時,會提示找不到。 2、例如self.__

Python 中的類的成員成員修飾類的特殊成員

看了一下,現在的CSDN大多都是Python2來編寫例子,今天邊學習,邊進行修改為Python3,大家互相學習 面向物件是一種程式設計方式,此程式設計方式的實現是基於對 類 和 物件 的使用 類 是一個模板,模板中包裝了多個“函式”供使用 物件,根據模板建立的例項(即:

Python 類的成員成員修飾類的特殊成員

面向物件是一種程式設計方式,此程式設計方式的實現是基於對 類 和 物件 的使用類 是一個模板,模板中包裝了多個“函式”供使用(可以講多函式中公用的變數封裝到物件中)物件,根據模板建立的例項(即:物件),例項用於呼叫被包裝在類中的函式面向物件三大特性:封裝、繼承和多型。類的成員

java 類屬性方法修飾總結

修飾符可以分為訪問修飾符(訪問控制符)和非訪問修飾符(非訪問控制符) 訪問修飾符:顧名思義如果在根據訪問範圍內可以控制訪問。 非訪問修飾符:實現一些其他的功能。   一、類修飾符        訪問修飾符:pu

面向物件———封裝,包,訪問修飾,static關鍵字

一、封裝概念 封裝實質就是將類的狀態資訊隱藏在類內部,不允許外部程式直接訪問,而是通過該類的方法來實現對隱藏資訊的操作和訪問。 理解:封裝就是將類內部的屬性私有化,不允許外部直接訪問,然後通過對應的get,set方法來實現對隱藏資訊的操作! 封裝好處:隱藏類的實現細節,

php——14-面向物件的繼承 和 訪問控制修飾

普通類 無繼承的程式碼很繁瑣(其中 Dog 類的 $name 屬性和 shout 方法重複定義) <?php class Animal { public $name = 'Animal'

java中介面的屬性方法的預設修飾和類的屬性訪問修飾的區別

介面中的屬性的預設是public static final 、方法是public abstract 類的成員變數或成員方法宣告為預設許可權,則其是包級可見,同一個包內的類可以訪問到這個屬性或方法fri

Python學習17.Python面向對象(四屬性(特性),成員修飾,類的特殊成員

介紹 col 寫代碼 被調用 表示 1.5 emp 成員 object 一、屬性(特性) 普通方法去執行的時候,後面需要加括號,特性方法執行的時候和靜態字段一樣不需要不需要加括號. 特性方法不和字段同名. 特性方法不能傳參數. 在我們定義數據庫字段類的時候,往往需要

Python面向物件(類的成員屬性)

day24 類的成員之屬性 1 class Foo(): 2 def bar(self): 3 print("bar") 4 5 @property 6 def per(self): 7 print('123') 8

python面向物件學習(六)類屬性類方法靜態方法

目錄 1. 類的結構 1.1 術語 —— 例項 1.2 類是一個特殊的物件 2. 類屬性和例項屬性 2.1 概念和使用 2.2 屬性的獲取機制 3. 類方法和靜態方法 3.1 類方法 3.2 靜態方法