摘要:聲明對象構造函數,創(chuàng)建實例需要用到訪問限制封裝性是面向對象的一大特點,如果要內部屬性不被外部調用,需要加上兩個下劃線這樣就沒辦法直接通過實例來訪問這個變量了因為這個時候,變量已經被隱式的變成了繼承繼承的一般寫法為所有的類都繼承于這個類。
包
python中包的引用是一個坑,經常出現這個文件夾的代碼,引用不到另一個文件夾的代碼,這個時候就必須要去更改環(huán)境變量,無論如何,總感覺不是一種優(yōu)雅的做法,為了避免這樣的情況出現,做好項目目錄結構就顯得十分的重要。以 dirsearch 這樣的工具為例
一般項目,我們需要設置一個入口文件,用來運行代碼,而實現主要功能的,我們可以分散在其他文件夾里面,這樣一來,我們就可以跨文件夾調用代碼了,因為這些功能代碼不是主要運行文件。
Python面對對象的實現,采用的是“鴨子模型”的方式,什么是鴨子模型,一個動物,只要它叫聲像鴨子,走路像鴨子,行為舉止動作思想等等方面像鴨子,那么在python里面,就說明這是一只鴨子。 怎么理解呢? 比如說,Iterator 對象是因為內部有一個__iter__方法,所以才被稱之為Iterator 對象,所以在python里面,只要聲明一個對象,并且實現了__iter__ 方法,那么聲明的這個對象就是 Iterator 對象。
聲明對象class Student(object): # 構造函數,創(chuàng)建實例需要用到 def __init__(self): pass訪問限制
封裝性是面向對象的一大特點,如果要內部屬性不被外部調用,需要加上 __ 兩個下劃線
class Student(object): def __init__(self,name): self.__name = name
這樣就沒辦法直接通過實例來訪問這個變量了
>>> bart = Student("Bart Simpson") >>> bart.__name Traceback (most recent call last): File "", line 1, in AttributeError: "Student" object has no attribute "__name"
因為這個時候,__name 變量已經被隱式的變成了 _Student__name
繼承繼承的一般寫法為:
class Animal(object): pass class Cat(Animal): pass
所有的類都繼承于 object 這個類。所要注意的是,在繼承父類的時候,也會同時繼承其構造函數,但是如果要給子類添加一些新的屬性時候要怎么辦? 比如說父類是一個比較模糊的名詞,Animal,創(chuàng)建的實例Cat要有一個名字 name,這個時候,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)
因為是鴨子類型,所以多態(tài)也不是嚴格意義上的多態(tài)。 只是一個參數上的形式而已。
使用__slots__使用 slots 可以 限制類的實例賦值,比如,要限制 Student 的實例,只能添加 name 和 age 兩個屬性,其他的不允許,就可以這么做:
# 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
這個屬性主要是針對對象的封裝性的,對象的屬性一般是不應該通過實例直接來設置,一般還需要設置 get 和 set 方法。 @property 就是這么來使用的。例子
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...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42951.html
摘要:聲明式編程一種編程范式,與命令式編程相對立。常見的聲明式編程語言有數據庫查詢語言,正則表達式邏輯編程函數式編程組態(tài)管理系統(tǒng)等。函數式編程,特別是純函數式編程,嘗試最小化狀態(tài)帶來的副作用,因此被認為是聲明式的。 編程范式與函數式編程 一、編程范式的分類 常見的編程范式有:函數式編程、程序編程、面向對象編程、指令式編程等。在面向對象編程的世界,程序是一系列相互作用(方法)的對象(Class...
摘要:一面向對象編程簡介定義,簡稱,是一種程序設計思想。好處維護簡單模塊化是面向對象編程中的一個特征。可擴充性面向對象編程從本質上支持擴充性。 一、面向對象編程簡介 1.定義: Object Oriented Programming,簡稱OOP,是一種程序設計思想。OOP把對象作為程序的基本單元,一個對象包含了數據和操作數據的函數。 2.好處: (1)、維護簡單:模塊化是面向對象編程中的一個...
摘要:二面向對象概述面向過程的設計思想和面向對象的設計思想我要吃魚香肉絲蓋飯面向過程我買菜我洗菜我切菜我放水我點火我做飯我炒菜。。。。 大家好,上次我們講過了樂字節(jié)Java編程之方法、調用、重載、遞歸,接下來我們將會進入到Java封裝的內容。Java編程語言發(fā)展,面向對象和類。 一、編程語言的發(fā)展 機器語言——直接由計算機的指令組成,指令、數據、地址都以0和1組成:可以被計算機直接識別并執(zhí)行...
摘要:本文是響應式編程第一章響應式這篇文章的學習筆記。通過代碼對比可以發(fā)現,在響應式編程中,我們不再用對象的概念來對現實世界進行建模,而是使用流的思想對信息進行拆分和聚合。 本文是Rxjs 響應式編程-第一章:響應式這篇文章的學習筆記。示例代碼地址:【示例代碼】 更多文章:【《大史住在大前端》博文集目錄】 showImg(https://segmentfault.com/img/bVbuE...
摘要:為什么要采用面向對象編程解決問題更容易設計計算機程序就是為了解決人類的問題。面向對象編程需要對業(yè)務及代碼的架構是有一定的要求的。 1. 編程方式 我們目前的編程方式大體可以有以下三種編程方式: 順序編程 過程式編程 面向對象編程 在講面向對象編程時先講一下什么是順序編程,什么是過程式編程,什么是面向對象編程: 順序編程: 就是只用一個單線程去執(zhí)行一段代碼,執(zhí)行過程根據代碼依次從上...
摘要:眾多面向對象的編程思想雖不盡一致,但是無論哪種面向對象編程語言都具有以下的共通功能。原型編程以類為中心的傳統(tǒng)面向對象編程,是以類為基礎生成新對象。而原型模式的面向對象編程語言沒有類這樣一個概念。 什么是面向對象?這個問題往往會問到剛畢業(yè)的新手or實習生上,也是往往作為一個技術面試的開頭題。在這里我們不去談如何答(fu)好(yan)問(guo)題(qu),僅談談我所理解的面向對象。 從歷...
閱讀 2614·2021-11-22 15:25
閱讀 1442·2021-11-15 17:59
閱讀 1141·2021-09-29 09:34
閱讀 1551·2021-09-26 09:46
閱讀 3038·2021-09-02 15:40
閱讀 1194·2019-08-30 15:56
閱讀 3288·2019-08-30 15:55
閱讀 701·2019-08-29 17:08