国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python面向對象類編寫細節分析【類,方法,繼承,超類,接口等】

2020-02-16 00:29:37
字體:
來源:轉載
供稿:網友

本文實例講述了Python面向對象類編寫技術細節。分享給大家供大家參考,具體如下:

類代碼編寫細節

繼續學習類、方法和繼承。

class語句

以下是class語句的一般形式:

class <name>(superclass,...):  data = value  def method(self,...):    self.member = value

在class語句內,任何賦值語句都會產生類屬性,而且還有特殊名稱方法重載運算符。例如,名為__init__的函數會在實例對象構造時調用(如果定義過的話)。

例子

類是命名空間,也就是定義變量名(屬性)的工具。

1.就像函數一樣,class語句是本地作用域,由內嵌的賦值語句建立的變量名,就存在于這個本地作用域內。

2.就像模塊內的變量名,在class語句內賦值的變量名會變成類對象中的屬性。

因為class是復合語句,所以任何種類的語句都可位于其主體內:print、=、if、def等。當class語句自身執行時,class語句內的所有語句都會執行。在class語句內賦值的變量名,會創建類屬性,而內嵌的def則會創建類方法。

例如,把簡單的非函數的對象賦值給類屬性,就會產生數據屬性,由所有實例共享。

>>> class ShareData:  spam = 42>>> x = ShareData()>>> y = ShareData()>>> x.spam,y.spam(42, 42)

在這里,因為變量名spam是在class語句的頂層進行賦值的,因此會附加在這個類中,從而為所有的實例共享。我們可通過類名稱修改它,或者是通過實例或類引用它。

>>> ShareData.spam = 99>>> x.spam,y.spam,ShareData.spam(99, 99, 99)

這種類屬性可以用于管理貫穿所有實例的信息。例如,所產生的實例的數目的計數器。

現在,如果通過實例而不是類來給變量名spam賦值時,看看會發生什么:

>>> x.spam = 88>>> x.spam,y.spam,ShareData.spam(88, 99, 99)

對實例的屬性進行賦值運算會在該實例內創建或修改變量名,而不是在共享的類中。

對對象屬性進行賦值總是會修改該對象,除此之外沒有其他的影響。例如,y.spam會通過繼承而在類中查找,但是,對x.spam進行賦值運算則會把該變量名附加在x本身上。

看下面這個例子,可以更容易理解這種行為,把相同的變量名儲存在兩個位置:

>>> class MixedNames:  data = 'spam'  def __init__(self,value):    self.data = value  def display(self):    print(self.data,MixedNames.data)

當創建這個類的實例的時候,變量名data會在構造函數方法內對self.data進行賦值運算,從而把data附加到這些實例上。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云龙县| 巩义市| 肥东县| 寻乌县| 信宜市| 麻栗坡县| 巧家县| 青海省| 湛江市| 渝中区| 遂平县| 建阳市| 安平县| 六盘水市| 南川市| 于田县| 胶南市| 额济纳旗| 博白县| 巴里| 五指山市| 吉林省| 新田县| 腾冲县| 图木舒克市| 天台县| 襄樊市| 海安县| 贵州省| 澄城县| 湘西| 临潭县| 宜君县| 巴青县| 荆门市| 马公市| 青岛市| 西昌市| 朝阳县| 桂阳县| 龙门县|