溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

面向?qū)ο筮M階

發(fā)布時間:2020-07-20 02:52:40 來源:網(wǎng)絡(luò) 閱讀:258 作者:mb5d40259989ce8 欄目:編程語言

面向?qū)ο筮M階

類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數(shù)體之外。類變量通常不作為實例變量使用。
數(shù)據(jù)成員:類變量或者實例變量, 用于處理類及其實例對象的相關(guān)的數(shù)據(jù)。
方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
局部變量:定義在方法中的變量,只作用于當(dāng)前實例的類。
實例變量:在類的聲明中,屬性是用變量來表示的。這種變量就稱為實例變量,是在類聲明的內(nèi)部但是在類的其他成員方法之外聲明的。
繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設(shè)計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關(guān)系(例圖,Dog是一個Animal)。
實例化:創(chuàng)建一個類的實例,類的具體對象。
方法:類中定義的函數(shù)。
*對象:通過類定義的數(shù)據(jù)結(jié)構(gòu)實例。對象包括兩個數(shù)據(jù)成員(類變量和實例變量)和方法。
在前面的章節(jié)我們已經(jīng)了解了面向?qū)ο蟮娜腴T知識,知道了如何定義類,如何創(chuàng)建對象以及如何給對象發(fā)消息。為了能夠更好的使用面向?qū)ο缶幊趟枷脒M行程序開發(fā),我們還需要對Python中的面向?qū)ο缶幊踢M行更為深入的了解。

時間打印
import time
time.sleep()

降序
a.sort(reverse=True)
end=' ' 變?yōu)橐恍?/p>

面向?qū)ο筮M階

一.@property裝飾器

之前我們討論過Python中屬性和方法訪問權(quán)限的問題,雖然我們不建議將屬性設(shè)置為私有的,但是如果直接將屬性暴露給外界也是有問題的,比如我們沒有辦法檢查賦給屬性的值是否有效。我們之前的建議是將屬性命名以單下劃線開頭,通過這種方式來暗示屬性是受保護的,不建議外界直接訪問,那么如果想訪問屬性可以通過屬性的getter(訪問器)和setter(修改器)方法進行對應(yīng)的操作。如果要做到這點,就可以考慮使用@property包裝器來包裝getter和setter方法,使得對屬性的訪問既安全又方便,代碼如下所示。
使用裝飾器的時候,需要注意:
**1. 裝飾器名,函數(shù)名需要一致.

  1. property需要先聲明,再寫setter,順序不能倒過來
  2. 如果你希望一點變量只是被訪問不能被修改,那么可以使用訪問器@property
  3. 如果要修改訪問器中的變量,可以搭建一個修改器,或者刪除訪問器.
class Person(object):
      def __init__(self, name, age):
          self._name = name
          self._age = age

    # 訪問器 - getter方法
    @property
    def name(self):
        return self._name

    # 訪問器 - getter方法
    @property
    def age(self):
        return self._age

    # 修改器 - setter方法
    @age.setter
    def age(self, age):
        self._age = age

    def play(self):
        if self._age <= 16:
            print('%s正在玩飛行棋.' % self._name)
        else:
            print('%s正在玩斗地主.' % self._name)
   def main():
       person = Person('王大錘', 12)
       person.play()
       person.age = 22
       person.play()

    # person.name = '白元芳'  # AttributeError: can't set attribute

if __name__ == '__main__':
    main()

二.python中類是動態(tài)的

class Num(object):
    def __init__(self):
        self.a = 1000

    def A(self):
        print(self.b)

num = Num()
num.b =1000000
#print(num.a)
print(num.b)
num.A()

三.slots魔法

我們講到這里,不知道大家是否已經(jīng)意識到,Python是一門[動態(tài)語言]。通常,動態(tài)語言允許我們在程序運行時給對象綁定新的屬性或方法,當(dāng)然也可以對已經(jīng)綁定的屬性和方法進行解綁定。但是如果我們需要限定自定義類型的對象只能綁定某些屬性,可以通過在類中定義slots變量來進行限定。需要注意的是slots的限定只對當(dāng)前類的對象生效,對子類并不起任何作用。


class Person(object):

    # 限定Person對象只能綁定_name, _age和_gender屬性
    __slots__ = ('_name', '_age', '_gender')

    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        self._age = age

    def play(self):
        if self._age <= 16:
            print('%s正在玩飛行棋.' % self._name)
        else:
            print('%s正在玩斗地主.' % self._name)

def main():
    person = Person('王大錘', 22)
    person.play()
    person._gender = '男'
    #AttributeError: 'Person' object has no attribute '_is_gay'
    #person._is_gay = True

私有:
class Name(object):
def init(self,a,b):
self.a=a
self.b=b
面向?qū)ο筮M階

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI