亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

4-面向?qū)ο缶幊?

LancerComet / 2714人閱讀

摘要:聲明對(duì)象構(gòu)造函數(shù),創(chuàng)建實(shí)例需要用到訪問(wèn)限制封裝性是面向?qū)ο蟮囊淮筇攸c(diǎn),如果要內(nèi)部屬性不被外部調(diào)用,需要加上兩個(gè)下劃線這樣就沒(méi)辦法直接通過(guò)實(shí)例來(lái)訪問(wèn)這個(gè)變量了因?yàn)檫@個(gè)時(shí)候,變量已經(jīng)被隱式的變成了繼承繼承的一般寫(xiě)法為所有的類都繼承于這個(gè)類。

python中包的引用是一個(gè)坑,經(jīng)常出現(xiàn)這個(gè)文件夾的代碼,引用不到另一個(gè)文件夾的代碼,這個(gè)時(shí)候就必須要去更改環(huán)境變量,無(wú)論如何,總感覺(jué)不是一種優(yōu)雅的做法,為了避免這樣的情況出現(xiàn),做好項(xiàng)目目錄結(jié)構(gòu)就顯得十分的重要。以 dirsearch 這樣的工具為例


一般項(xiàng)目,我們需要設(shè)置一個(gè)入口文件,用來(lái)運(yùn)行代碼,而實(shí)現(xiàn)主要功能的,我們可以分散在其他文件夾里面,這樣一來(lái),我們就可以跨文件夾調(diào)用代碼了,因?yàn)檫@些功能代碼不是主要運(yùn)行文件。

面向?qū)ο?/b>

Python面對(duì)對(duì)象的實(shí)現(xiàn),采用的是“鴨子模型”的方式,什么是鴨子模型,一個(gè)動(dòng)物,只要它叫聲像鴨子,走路像鴨子,行為舉止動(dòng)作思想等等方面像鴨子,那么在python里面,就說(shuō)明這是一只鴨子。 怎么理解呢? 比如說(shuō),Iterator 對(duì)象是因?yàn)閮?nèi)部有一個(gè)__iter__方法,所以才被稱之為Iterator 對(duì)象,所以在python里面,只要聲明一個(gè)對(duì)象,并且實(shí)現(xiàn)了__iter__ 方法,那么聲明的這個(gè)對(duì)象就是 Iterator 對(duì)象。

聲明對(duì)象
class Student(object):
    # 構(gòu)造函數(shù),創(chuàng)建實(shí)例需要用到
    def __init__(self):
        pass 
訪問(wèn)限制

封裝性是面向?qū)ο蟮囊淮筇攸c(diǎn),如果要內(nèi)部屬性不被外部調(diào)用,需要加上 __ 兩個(gè)下劃線

class Student(object):
     def __init__(self,name):
         self.__name = name

這樣就沒(méi)辦法直接通過(guò)實(shí)例來(lái)訪問(wèn)這個(gè)變量了

>>> bart = Student("Bart Simpson")
>>> bart.__name
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: "Student" object has no attribute "__name"

因?yàn)檫@個(gè)時(shí)候,__name 變量已經(jīng)被隱式的變成了 _Student__name

繼承

繼承的一般寫(xiě)法為:

class Animal(object):
    pass
    
class Cat(Animal):
    pass

所有的類都繼承于 object 這個(gè)類。所要注意的是,在繼承父類的時(shí)候,也會(huì)同時(shí)繼承其構(gòu)造函數(shù),但是如果要給子類添加一些新的屬性時(shí)候要怎么辦? 比如說(shuō)父類是一個(gè)比較模糊的名詞,Animal,創(chuàng)建的實(shí)例Cat要有一個(gè)名字 name,這個(gè)時(shí)候,name就是子類新的屬性。例子:

class Animal(object):
    def __init__(self,feather):
        self.feather = feather
    # 是否有羽毛
    def is_feather(self):
        return self.feather

class Bird(Animal):
    def __init__(self,name,age,*args,**kw):
        self.name = name
        self.age = age
        super(Bird,self).__init__(*args,**kw)
    
    def is_feather(self):
        return self.feather
多態(tài)

因?yàn)槭区喿宇愋?,所以多態(tài)也不是嚴(yán)格意義上的多態(tài)。 只是一個(gè)參數(shù)上的形式而已。

使用__slots__

使用 slots 可以 限制類的實(shí)例賦值,比如,要限制 Student 的實(shí)例,只能添加 name 和 age 兩個(gè)屬性,其他的不允許,就可以這么做:

# coding: utf-8 
class Student(object):
    __slots__ = ("name", "age") # 用tuple定義允許綁定的屬性名稱
    def __init__(self):
        pass
   
if __name__ =="__main__":
    s = Student()
    s.scope = 100
# 輸出:  AttributeError: "Student" object has no attribute "scope" 
使用@property

這個(gè)屬性主要是針對(duì)對(duì)象的封裝性的,對(duì)象的屬性一般是不應(yīng)該通過(guò)實(shí)例直接來(lái)設(shè)置,一般還需要設(shè)置 get 和 set 方法。 @property 就是這么來(lái)使用的。例子

class Student(object):
    @property
    def score(self):
        return self._score
        
    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError("score must be an integer!")
        if value < 0 or value > 100:
            raise ValueError("score must between 0 ~ 100!")
        self._score = value
參考

https://www.liaoxuefeng.com/w...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42951.html

相關(guān)文章

  • 編程范式與函數(shù)式編程

    摘要:聲明式編程一種編程范式,與命令式編程相對(duì)立。常見(jiàn)的聲明式編程語(yǔ)言有數(shù)據(jù)庫(kù)查詢語(yǔ)言,正則表達(dá)式邏輯編程函數(shù)式編程組態(tài)管理系統(tǒng)等。函數(shù)式編程,特別是純函數(shù)式編程,嘗試最小化狀態(tài)帶來(lái)的副作用,因此被認(rèn)為是聲明式的。 編程范式與函數(shù)式編程 一、編程范式的分類 常見(jiàn)的編程范式有:函數(shù)式編程、程序編程、面向?qū)ο缶幊?、指令式編程等。在面向?qū)ο缶幊痰氖澜?,程序是一系列相互作用(方法)的?duì)象(Class...

    noONE 評(píng)論0 收藏0
  • 解決js面向對(duì)象編程的難題

    摘要:一面向?qū)ο缶幊毯?jiǎn)介定義,簡(jiǎn)稱,是一種程序設(shè)計(jì)思想。好處維護(hù)簡(jiǎn)單模塊化是面向?qū)ο缶幊讨械囊粋€(gè)特征。可擴(kuò)充性面向?qū)ο缶幊虖谋举|(zhì)上支持?jǐn)U充性。 一、面向?qū)ο缶幊毯?jiǎn)介 1.定義: Object Oriented Programming,簡(jiǎn)稱OOP,是一種程序設(shè)計(jì)思想。OOP把對(duì)象作為程序的基本單元,一個(gè)對(duì)象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)。 2.好處: (1)、維護(hù)簡(jiǎn)單:模塊化是面向?qū)ο缶幊讨械囊粋€(gè)...

    ermaoL 評(píng)論0 收藏0
  • 樂(lè)字節(jié)Java編程語(yǔ)言發(fā)展、面向對(duì)象和類

    摘要:二面向?qū)ο蟾攀雒嫦蜻^(guò)程的設(shè)計(jì)思想和面向?qū)ο蟮脑O(shè)計(jì)思想我要吃魚(yú)香肉絲蓋飯面向過(guò)程我買(mǎi)菜我洗菜我切菜我放水我點(diǎn)火我做飯我炒菜。。。。 大家好,上次我們講過(guò)了樂(lè)字節(jié)Java編程之方法、調(diào)用、重載、遞歸,接下來(lái)我們將會(huì)進(jìn)入到Java封裝的內(nèi)容。Java編程語(yǔ)言發(fā)展,面向?qū)ο蠛皖悺?一、編程語(yǔ)言的發(fā)展 機(jī)器語(yǔ)言——直接由計(jì)算機(jī)的指令組成,指令、數(shù)據(jù)、地址都以0和1組成:可以被計(jì)算機(jī)直接識(shí)別并執(zhí)行...

    lufficc 評(píng)論0 收藏0
  • 【響應(yīng)式編程的思維藝術(shù)】 (2)響應(yīng)式Vs面向對(duì)象

    摘要:本文是響應(yīng)式編程第一章響應(yīng)式這篇文章的學(xué)習(xí)筆記。通過(guò)代碼對(duì)比可以發(fā)現(xiàn),在響應(yīng)式編程中,我們不再用對(duì)象的概念來(lái)對(duì)現(xiàn)實(shí)世界進(jìn)行建模,而是使用流的思想對(duì)信息進(jìn)行拆分和聚合。 本文是Rxjs 響應(yīng)式編程-第一章:響應(yīng)式這篇文章的學(xué)習(xí)筆記。示例代碼地址:【示例代碼】 更多文章:【《大史住在大前端》博文集目錄】 showImg(https://segmentfault.com/img/bVbuE...

    Tonny 評(píng)論0 收藏0
  • 初探面向對(duì)象編程之oop與設(shè)計(jì)模式

    摘要:為什么要采用面向?qū)ο缶幊探鉀Q問(wèn)題更容易設(shè)計(jì)計(jì)算機(jī)程序就是為了解決人類的問(wèn)題。面向?qū)ο缶幊绦枰獙?duì)業(yè)務(wù)及代碼的架構(gòu)是有一定的要求的。 1. 編程方式 我們目前的編程方式大體可以有以下三種編程方式: 順序編程 過(guò)程式編程 面向?qū)ο缶幊? 在講面向?qū)ο缶幊虝r(shí)先講一下什么是順序編程,什么是過(guò)程式編程,什么是面向?qū)ο缶幊蹋? 順序編程: 就是只用一個(gè)單線程去執(zhí)行一段代碼,執(zhí)行過(guò)程根據(jù)代碼依次從上...

    BingqiChen 評(píng)論0 收藏0
  • 談?wù)勎宜斫獾?em>面向對(duì)象

    摘要:眾多面向?qū)ο蟮木幊趟枷腚m不盡一致,但是無(wú)論哪種面向?qū)ο缶幊陶Z(yǔ)言都具有以下的共通功能。原型編程以類為中心的傳統(tǒng)面向?qū)ο缶幊?,是以類為基礎(chǔ)生成新對(duì)象。而原型模式的面向?qū)ο缶幊陶Z(yǔ)言沒(méi)有類這樣一個(gè)概念。 什么是面向?qū)ο螅窟@個(gè)問(wèn)題往往會(huì)問(wèn)到剛畢業(yè)的新手or實(shí)習(xí)生上,也是往往作為一個(gè)技術(shù)面試的開(kāi)頭題。在這里我們不去談如何答(fu)好(yan)問(wèn)(guo)題(qu),僅談?wù)勎宜斫獾拿嫦驅(qū)ο蟆?從歷...

    avwu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<