RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一種可以優(yōu)雅編程的語(yǔ)言Python知識(shí)點(diǎn)匯總

馬哥Linux運(yùn)維 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-03-26 15:58 ? 次閱讀

第一個(gè)問(wèn)題,什么是 Python ?根據(jù) Python 之父 Guido van Rossum 的話,Python 是:

一種高級(jí)程序語(yǔ)言,其核心設(shè)計(jì)哲學(xué)是代碼可讀性和語(yǔ)法,能夠讓程序員用很少的代碼來(lái)表達(dá)自己的想法。

對(duì)于我來(lái)說(shuō),學(xué)習(xí) Python 的首要原因是,Python 是一種可以優(yōu)雅編程的語(yǔ)言。它能夠簡(jiǎn)單自然地寫(xiě)出代碼和實(shí)現(xiàn)我的想法。

另一個(gè)原因是我們可以將 Python 用在很多地方:數(shù)據(jù)科學(xué)、Web 開(kāi)發(fā)和機(jī)器學(xué)習(xí)等都可以使用 Python 來(lái)開(kāi)發(fā)。Quora、Pinterest 和 Spotify 都使用 Python 來(lái)進(jìn)行他們的后端 Web 開(kāi)發(fā)。那么讓我們來(lái)學(xué)習(xí)一下 Python 吧。

Python 基礎(chǔ)

1. 變量

你可以把變量想象成一個(gè)用來(lái)存儲(chǔ)值的單詞。我們看個(gè)例子。

Python 中定義一個(gè)變量并為它賦值是很容易的。假如你想存儲(chǔ)數(shù)字 1 到變量 “one” ,讓我們?cè)囋嚳矗?/p>

one = 1

超級(jí)簡(jiǎn)單吧?你只需要把值 1 分配給變量 “one” 。

two = 2

some_number = 10000

只要你想,你可以把任意的值賦給任何其他的變量。正如你從上面看到的那樣,變量 “two” 存儲(chǔ)整型變量2 ,變量 “some_number” 存儲(chǔ) 10000 。

除了整型,我們還可以使用布爾值(True/Flase)、字符串、浮點(diǎn)型和其他數(shù)據(jù)類(lèi)型。

# booleanstrue_boolean = Truefalse_boolean = False# stringmy_name = "Leandro Tk"# floatbook_price = 15.80

2. 控制流程:條件語(yǔ)句

“If” 使用一個(gè)表達(dá)式來(lái)判斷一個(gè)語(yǔ)句是 True 還是 False ,如果是 True ,那么執(zhí)行 if 內(nèi)的代碼,例子如下:

if True:

print("Hello Python If")

if 2 > 1:

print("2 is greater than 1")

2比1大,所以print代碼被執(zhí)行。

當(dāng)“if”里面的表達(dá)式是false時(shí),“else” 語(yǔ)句將會(huì)執(zhí)行。

if 1 > 2:

print("1 is greater than 2")

else:

print("1 is not greater than 2")

1比2小,所以 “else” 里面的代碼會(huì)執(zhí)行。

你也可以使用 “elif” 語(yǔ)句:

if 1 > 2:

print("1 is greater than 2")elif 2 > 1:

print("1 is not greater than 2")else:

print("1 is equal to 2")

3. 循環(huán)和迭代

在 Python 中,我們可以用不同的形式進(jìn)行迭代。我會(huì)說(shuō)下while和for。

While循環(huán):當(dāng)語(yǔ)句是 True 時(shí),while 內(nèi)部的代碼塊會(huì)執(zhí)行。所以下面這段代碼會(huì)打印出1到10 。

num = 1

while num <= 10:

print(num)

num += 1

while循環(huán)需要循環(huán)條件,如果條件一直是 True ,它將會(huì)一直迭代,當(dāng) num 的值為 11 時(shí),循環(huán)條件為 false 。

另一段代碼可以幫你更好的理解 while 語(yǔ)句的用法:

loop_condition = Truewhile loop_condition:

print("Loop Condition keeps: %s" %(loop_condition))

loop_condition = False

循環(huán)條件是 True 所以會(huì)一直迭代,直到為 False 。

For 循環(huán):你可以在代碼塊上應(yīng)用變量 “num” ,而 “for” 語(yǔ)句將為你迭代它。此代碼將打印與while中相同的代碼:從 1 到 10 。

for i in range(1, 11):

print(i)

瞧見(jiàn)沒(méi)?這太簡(jiǎn)單了。i 的范圍從 1 開(kāi)始一直到第 11 個(gè)元素(10是第十個(gè)元素)

List:集合 | 數(shù)組 | 數(shù)據(jù)結(jié)構(gòu)

假如你想要在一個(gè)變量里存儲(chǔ)整數(shù) 1 ,但是你也要存儲(chǔ) 2 和 3 , 4 , 5 ...

不是用成百上千個(gè)變量,我有別的方法存儲(chǔ)這些我想要存儲(chǔ)的整數(shù)嗎?你已經(jīng)猜到了,確實(shí)有別的存儲(chǔ)它們的方法。

列表是一個(gè)集合,它能夠存儲(chǔ)一列值(就像你想要存儲(chǔ)的這些),那么讓我們來(lái)用一下它:

my_integers = [1, 2, 3, 4, 5]

這真的很簡(jiǎn)單。我們創(chuàng)建了一個(gè)叫做 my_integer 的數(shù)組并且把數(shù)據(jù)存到了里面。

也許你會(huì)問(wèn):“我要怎樣獲取數(shù)組里的值?”

問(wèn)得好。列表有一個(gè)叫做索引的概念。第一個(gè)元素的下表是索引0(0)。第二個(gè)的索引是1,以此類(lèi)推,你應(yīng)該明白的。

為了使它更加簡(jiǎn)潔,我們可以用它的索引代表數(shù)組元素。我畫(huà)了出來(lái):

用Python 的語(yǔ)法,也很好去理解:

my_integers = [5, 7, 1, 3, 4]

print(my_integers[0]) # 5print(my_integers[1]) # 7print(my_integers[4]) # 4

假如你不想存整數(shù)。你只想去存一些字符串,像你親戚名字的列表。我的看起來(lái)是類(lèi)似這樣的:

relatives_names = [ "Toshiaki", "Juliana", "Yuji", "Bruno", "Kaio"]

print(relatives_names[4]) # Kaio

它的原理跟存整數(shù)一樣,很友好。

我們只學(xué)習(xí)了列表的索引是如何工作的,我還需要告訴你如何向列表的數(shù)據(jù)結(jié)構(gòu)中添加一個(gè)元素(向列表中添加一個(gè)項(xiàng)目)。

最常用的向列表中添加新數(shù)據(jù)的方法是拼接。我們來(lái)看一下它是如何使用的:

bookshelf = []

bookshelf.append("The Effective Engineer")

bookshelf.append("The 4 Hour Work Week")

print(bookshelf[0]) # The Effective Engineerprint(bookshelf[1]) # The 4 Hour Work W

拼接超級(jí)簡(jiǎn)單,你僅需要把一個(gè)元素(比如“有效的機(jī)器”)作為拼接參數(shù)。

好了,關(guān)于列表的知識(shí)這些就夠了,讓我們來(lái)看一下其它的數(shù)據(jù)結(jié)構(gòu)。

字典:Key-Value 數(shù)據(jù)結(jié)構(gòu)

現(xiàn)在我們知道 List 是有索引的整型數(shù)字集合。但如果我們不像使用整型數(shù)字作為索引呢?我們可以用其他的一些數(shù)據(jù)結(jié)構(gòu),比如數(shù)字、字符串或者其他類(lèi)型的索引。

讓我們學(xué)習(xí)下字典這種數(shù)據(jù)結(jié)構(gòu)。字典是一個(gè)鍵值對(duì)的集合。字典差不多長(zhǎng)這樣:

dictionary_example = {

"key1": "value1",

"key2": "value2",

"key3": "value3"

}

Key是指向value的索引。我們?nèi)绾卧L問(wèn)字典中的value呢?你應(yīng)該猜到了,那就是使用key 。我們?cè)囈幌拢?/p>

dictionary_tk = {

"name": "Leandro",

"nickname": "Tk",

"nationality": "Brazilian"

}

print("My name is %s" %(dictionary_tk["name"])) # My name is Leandro

print("But you can call me %s" %(dictionary_tk["nickname"])) # But you can call me Tk

print("And by the way I'm %s" %(dictionary_tk["nationality"])) # And by the way I'm Brazilian

我們有個(gè)key(age)value(24),使用字符串作為key整型作為value。

我創(chuàng)建了一個(gè)關(guān)于我的字典,其中包含我的名字、昵稱(chēng)和國(guó)籍。這些屬性是字典中的key 。

就像我們學(xué)過(guò)的使用索引訪問(wèn) list 一樣,我們同樣使用索引(在字典中 key 就是索引)來(lái)訪問(wèn)存儲(chǔ)在字典中的value。

正如我們使用 list 那樣,讓我們學(xué)習(xí)下如何向字典中添加元素。字典中主要是指向 value 的 key 。當(dāng)我們添加元素的時(shí)候同樣如此:

dictionary_tk = {

"name": "Leandro",

"nickname": "Tk",

"nationality": "Brazilian",

"age": 24

}

print("My name is %s" %(dictionary_tk["name"])) # My name is Leandro

print("But you can call me %s" %(dictionary_tk["nickname"])) # But you can call me Tk

print("And by the way I'm %i and %s" %(dictionary_tk["age"], dictionary_tk["nationality"])) # And by the way I'm Brazilian

我們只需要將一個(gè)字典中的一個(gè)key指向一個(gè)value。沒(méi)什么難的,對(duì)吧?

迭代:通過(guò)數(shù)據(jù)結(jié)構(gòu)進(jìn)行循環(huán)

跟我們?cè)?Python 基礎(chǔ)中學(xué)習(xí)的一樣,List 迭代十分簡(jiǎn)單。我們 Python 開(kāi)發(fā)者通常使用 For 循環(huán)。我們?cè)囋嚳矗?/p>

bookshelf = [

"The Effective Engineer",

"The 4 hours work week",

"Zero to One",

"Lean Startup",

"Hooked"

]

for book in bookshelf:

print(book)

對(duì)于在書(shū)架上的每本書(shū),我們打?。梢宰鋈魏尾僮鳎┑娇刂婆_(tái)上。超級(jí)簡(jiǎn)單和直觀吧。這就是 Python 的美妙之處。

對(duì)于哈希數(shù)據(jù)結(jié)構(gòu),我們同樣可以使用 for 循環(huán),不過(guò)我們需要使用 key 來(lái)進(jìn)行。

dictionary = { "some_key": "some_value" }

for key in dictionary:

print("%s --> %s" %(key, dictionary[key])) # some_key --> some_value

上面是如何在字典中使用 For 循環(huán)的例子。對(duì)于字典中的每個(gè) key ,我們打印出 key 和 key 所對(duì)應(yīng)的 value 。

另一種方式是使用 iteritems 方法。

dictionary = { "some_key": "some_value" }

for key, value in dictionary.items():

print("%s --> %s" %(key, value))# some_key --> some_value

我們命名兩個(gè)參數(shù)為 key 和 value ,但是這不是必要的。我們可以隨意命名。我們看下:

dictionary_tk = {

"name": "Leandro",

"nickname": "Tk",

"nationality": "Brazilian",

"age": 24

}

for attribute, value in dictionary_tk.items():

print("My %s is %s" %(attribute, value))

# My name is Leandro

# My nickname is Tk

# My nationality is Brazilian

# My age is 24

可以看到我們使用了 attribute 作為字典中 key 的參數(shù),這與使用 key 命名具有同樣的效果。真是太棒了!

類(lèi)&對(duì)象

一些理論:

對(duì)象是對(duì)現(xiàn)實(shí)世界實(shí)體的表示,如汽車(chē)、狗或自行車(chē)。 這些對(duì)象有兩個(gè)共同的主要特征:數(shù)據(jù)和行為。

汽車(chē)有數(shù)據(jù),如車(chē)輪的數(shù)量,車(chē)門(mén)的數(shù)量和座位的空間,并且它們可以表現(xiàn)出其行為:它們可以加速,停止,顯示剩余多少燃料,以及許多其他的事情。

我們將數(shù)據(jù)看作是面向?qū)ο缶幊讨械膶傩院托袨椤?又表示為:

數(shù)據(jù)→ 屬性和行為 → 方法

而類(lèi)是創(chuàng)建單個(gè)對(duì)象的藍(lán)圖。 在現(xiàn)實(shí)世界中,我們經(jīng)常發(fā)現(xiàn)許多相同類(lèi)型的對(duì)象。 比如說(shuō)汽車(chē)。 所有的汽車(chē)都有相同的構(gòu)造和模型(都有一個(gè)引擎,輪子,門(mén)等)。每輛車(chē)都是由同一套藍(lán)圖構(gòu)造成的,并具有相同的組件。

Python 面向?qū)ο缶幊棠J剑篛N

Python,作為一種面向?qū)ο缶幊陶Z(yǔ)言,存在這樣的概念:類(lèi)和對(duì)象。

一個(gè)類(lèi)是一個(gè)藍(lán)圖,是對(duì)象的模型。

那么,一個(gè)類(lèi)是一個(gè)模型,或者是一種定義屬性和行為的方法(正如我們?cè)诶碚摬糠钟懻摰哪菢樱Ee例來(lái)說(shuō),一個(gè)車(chē)輛類(lèi)有它自己的屬性來(lái)定義這個(gè)對(duì)象是個(gè)什么樣的車(chē)輛。一輛車(chē)的屬性有輪子數(shù)量,能源類(lèi)型,座位容量和最大時(shí)速這些。

考慮到這一點(diǎn),讓我們來(lái)看看 Python 的類(lèi)的語(yǔ)法:

class Vehicle:

pass

上邊的代碼,我們使用class 語(yǔ)句來(lái)定義一個(gè)類(lèi)。是不是很容易?

對(duì)象是一個(gè)類(lèi)的實(shí)例化,我們可以通過(guò)類(lèi)名來(lái)進(jìn)行實(shí)例化。

car = Vehicle()

print(car) # <__main__.Vehicle instance at 0x7fb1de6c2638>

在這里,car 是類(lèi) Vehicle 的對(duì)象(或者實(shí)例化)。

記得車(chē)輛類(lèi)有四個(gè)屬性:輪子的數(shù)量,油箱類(lèi)型,座位容量和最大時(shí)速。當(dāng)我們新建一個(gè)車(chē)輛對(duì)象時(shí)要設(shè)置所有的屬性。所以在這里,我們定義一個(gè)類(lèi)在它初始化的時(shí)候接受參數(shù):

class Vehicle:

def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity):

self.number_of_wheels = number_of_wheels

self.type_of_tank = type_of_tank

self.seating_capacity = seating_capacity

self.maximum_velocity = maximum_velocity

這個(gè) init方法。我們稱(chēng)之為構(gòu)造函數(shù)。因此當(dāng)我們?cè)趧?chuàng)建一個(gè)車(chē)輛對(duì)象時(shí),可以定義這些屬性。想象一下,我們喜歡 Tesla Model S ,所以我們想創(chuàng)建一個(gè)這種類(lèi)型的對(duì)象。它有四個(gè)輪子,使用電能源,五座并且最大時(shí)時(shí)速是250千米(155英里)。我們開(kāi)始創(chuàng)建這樣一個(gè)對(duì)象:

tesla_model_s = Vehicle(4, 'electric', 5, 250)

四輪+電能源+五座+最大時(shí)速250千米。

所有的屬性已經(jīng)設(shè)置了。但我們?cè)撊绾卧L問(wèn)這些屬性值呢?我們給對(duì)象發(fā)送消息以向其請(qǐng)求該值。我們稱(chēng)之為方法。它是對(duì)象的行為。讓我們實(shí)現(xiàn)它:

class Vehicle:

def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity):

self.number_of_wheels = number_of_wheels

self.type_of_tank = type_of_tank

self.seating_capacity = seating_capacity

self.maximum_velocity = maximum_velocity def number_of_wheels(self):

return self.number_of_wheels def set_number_of_wheels(self, number):

self.number_of_wheels = number

這是兩個(gè)方法number_of_wheels和set_number_of_wheels的實(shí)現(xiàn)。我們將其稱(chēng)為getter&setter。因?yàn)榈谝粋€(gè)函數(shù)是獲取屬性值,第二個(gè)函數(shù)是給屬性設(shè)置新的值。

在 Python 中,我們可以使用@property(修飾符)來(lái)定義getters和setters。讓我們看看實(shí)際代碼:

class Vehicle:

def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity):

self.number_of_wheels = number_of_wheels

self.type_of_tank = type_of_tank

self.seating_capacity = seating_capacity

self.maximum_velocity = maximum_velocity @property

def number_of_wheels(self):

return self.number_of_wheels @number_of_wheels.setter

def number_of_wheels(self, number):

self.number_of_wheels = number

并且我們可以將這些方法作為屬性使用:

tesla_model_s = Vehicle(4, 'electric', 5, 250)

print(tesla_model_s.number_of_wheels) # 4tesla_model_s.number_of_wheels = 2 # setting number of wheels to 2print(tesla_model_s.number_of_wheels) # 2

這和方法定義有輕微的不同。這里的方法是按照屬性執(zhí)行的。例如當(dāng)我們?cè)O(shè)置新的輪胎數(shù)目時(shí),我們并不將這兩個(gè)看做參數(shù),而是將數(shù)值2設(shè)置給number_of_wheels。這是編寫(xiě)python風(fēng)格的getter和setter代碼的一種方式。

但我們也可以將該方法用于其他事項(xiàng),例如“make_noise”方法。讓我們看看:

class Vehicle:

def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity):

self.number_of_wheels = number_of_wheels

self.type_of_tank = type_of_tank

self.seating_capacity = seating_capacity

self.maximum_velocity = maximum_velocity def make_noise(self):

print('VRUUUUUUUM')

當(dāng)我們調(diào)用此方法時(shí),它僅僅返回一個(gè)字符串“VRRRRUUUUM.”

tesla_model_s = Vehicle(4, 'electric', 5, 250)

tesla_model_s.make_noise() # VRUUUUUUUM

封裝: 隱藏信息

封裝是一種限制直接訪問(wèn)對(duì)象數(shù)據(jù)和方法的機(jī)制。但與此同時(shí),它使得在數(shù)據(jù)上操作更簡(jiǎn)單(對(duì)象的方法)。

“封裝可被用于隱藏?cái)?shù)據(jù)成員和成員函數(shù)。按照這個(gè)定義,封裝意味著對(duì)象的內(nèi)部表示一般在對(duì)象定義的外部視圖中隱藏。”?—?Wikipedia

對(duì)象的所有內(nèi)部表示都對(duì)外部隱藏了。只有對(duì)象本身可以與其內(nèi)部數(shù)據(jù)交互。

首先,我們需要理解公開(kāi)的、非公開(kāi)的實(shí)例變量和方法的工作原理。

公共實(shí)例變量

對(duì)于 Python 類(lèi),我們可以在我們的構(gòu)造函數(shù)方法中初始化一個(gè)公共實(shí)例變量。讓我們看看這個(gè):

在這個(gè)構(gòu)造方法中:

class Person:

def __init__(self, first_name):

self.first_name = first_name

在這里,我們將 first_name 值作為參數(shù)應(yīng)用于公共實(shí)例變量。

tk = Person('TK')

print(tk.first_name) # => TK

在類(lèi)中:

class Person:

first_name = 'TK'

在這里,我們不需要將 first_name 作為參數(shù),所有的實(shí)例對(duì)象都有一個(gè)用 TK 初始化的類(lèi)屬性。

tk = Person()

print(tk.first_name) # => TK

太酷了,現(xiàn)在我們已經(jīng)了解到,我們可以使用公共實(shí)例變量和類(lèi)屬性。關(guān)于公共部分的另一個(gè)有趣的事情是我們可以管理變量值。我的意思是什么呢?我們的對(duì)象可以管理它的變量值:Get 和 Set 變量值。

還是在 Person 類(lèi)中,我們想為它的 first_name 變量設(shè)置另一個(gè)值:

tk = Person('TK')

tk.first_name = 'Kaio'print(tk.first_name) # => Kaio

這就可以了,我們只是為 first_name 實(shí)例變量設(shè)置另一個(gè)值(kaio),并更新了值。就這么簡(jiǎn)單。因?yàn)檫@是一個(gè)公共變量,我們是可以這么做的。

Non-public 實(shí)例變量

這里我們并沒(méi)有使用術(shù)語(yǔ)“private”,因?yàn)樵赑ython中所有屬性都不是真的私有的(沒(méi)有通常不必要的工作量)。?—?PEP8

作為public instance variable(公共實(shí)例變量),我們可以在構(gòu)造方法或類(lèi)內(nèi)部定義non-public instance variable(非公共實(shí)例變量)。語(yǔ)法上的區(qū)別是:對(duì)于non-public instance variables(非公共實(shí)例變量),在變量名前使用下劃線(_)。

“除了從對(duì)象內(nèi)部外無(wú)法被訪問(wèn)的‘Private’實(shí)例變量在Python中并不存在。然而,這里有一個(gè)多數(shù)Python代碼都會(huì)遵守的慣例:使用下劃線作為前綴的命名(例如 _spam)應(yīng)該被認(rèn)為是API的非公開(kāi)部分(不管是函數(shù)、方法還是數(shù)據(jù)成員)”?—?Python軟件基礎(chǔ)

這里是示例代碼:

class Person:

def __init__(self, first_name, email):

self.first_name = first_name

self._email = email

你看到了email變量了嗎?這就是我們?nèi)绾味x非公共變量的方法:

tk = Person('TK', 'tk@mail.com')

print(tk._email) # tk@mail.com

我們可以訪問(wèn)并更新它。非公共變量?jī)H僅是一個(gè)慣用法,并且應(yīng)該被當(dāng)做API的非公共部分。

所以我們使用一個(gè)在類(lèi)定義內(nèi)部的方法來(lái)實(shí)現(xiàn)該功能。讓我們實(shí)現(xiàn)兩個(gè)方法(email 和update_email)以加深理解:

class Person:

def __init__(self, first_name, email):

self.first_name = first_name

self._email = email def update_email(self, new_email):

self._email = new_email def email(self):

return self._email

現(xiàn)在我們可以使用這兩個(gè)方法來(lái)更新及訪問(wèn)非公開(kāi)變量了。示例如下:

tk = Person('TK', 'tk@mail.com')

print(tk.email()) # => tk@mail.comtk._email = 'new_tk@mail.com'print(tk.email()) # => tk@mail.comtk.update_email('new_tk@mail.com')

print(tk.email()) # => new_tk@mail.com

我們使用first_nameTK和emailtk@mail.com初始化了一個(gè)新對(duì)象

使用方法訪問(wèn)非公開(kāi)變量email并輸出它

嘗試在類(lèi)外部設(shè)置一個(gè)新的email

我們需要將非公開(kāi)變量視為API的非公開(kāi)部分

使用我們的實(shí)例方法來(lái)更新非公開(kāi)變量

成功!我們使用輔助方法在類(lèi)內(nèi)部更新了它。

公共方法

對(duì)于公共方法,我們也可以在類(lèi)中使用它們:

class Person:

def __init__(self, first_name, age):

self.first_name = first_name

self._age = age def show_age(self):

return self._age

讓我們來(lái)測(cè)試一下:

tk = Person('TK', 25)

print(tk.show_age()) # => 25

很好 - 我們?cè)陬?lèi)中使用它沒(méi)有任何問(wèn)題。

非公共方法

但是用非公開(kāi)的方法,我們無(wú)法做到這一點(diǎn)。 如果我們想實(shí)現(xiàn)相同的 Person 類(lèi),現(xiàn)在使用有下劃線(_)的 show_age 非公共方法。

class Person:

def __init__(self, first_name, age):

self.first_name = first_name

self._age = age def _show_age(self):

return self._age

現(xiàn)在,我們將嘗試用我們的對(duì)象來(lái)調(diào)用這個(gè)非公共的方法:

tk = Person('TK', 25)

print(tk._show_age()) # => 25

我們可以訪問(wèn)和更新它。 非公共的方法只是一個(gè)慣例,應(yīng)該被視為API的非公開(kāi)部分。

以下是我們?nèi)绾问褂盟囊粋€(gè)例子:

class Person:

def __init__(self, first_name, age):

self.first_name = first_name

self._age = age def show_age(self):

return self._get_age() def _get_age(self):

return self._age

tk = Person('TK', 25)

print(tk.show_age()) # => 25

這里有一個(gè) _get_age 非公共方法和一個(gè) show_age 公共方法。 show_age 可以被我們的對(duì)象(不在我們的類(lèi)中)使用,而 _get_age 只用在我們的類(lèi)定義里面使用(在 show_age 方法里面)。 但是同樣的,這樣的做法通常是慣例。

封裝小結(jié)

通過(guò)封裝,我們可以確保對(duì)象的內(nèi)部表示是對(duì)外部隱藏的。

繼承:行為和特征

某些物體有一些共同之處:它們的行為和特征。

例如,我繼承了我父親的一些特征和行為。我繼承了他的眼睛和頭發(fā)的特征,以及他的急躁和內(nèi)向的行為。

在面向?qū)ο缶幊讨校?lèi)可以繼承另一個(gè)類(lèi)的共同特征(數(shù)據(jù))和行為(方法)。

我們來(lái)看另一個(gè)例子,并用 Python 實(shí)現(xiàn)它。

想象一下汽車(chē)。車(chē)輪數(shù)量,座位容量和最大速度都是一輛車(chē)的屬性。我們可以說(shuō)ElectricCar類(lèi)從普通的Car類(lèi)繼承了這些相同的屬性。

class Car:

def __init__(self, number_of_wheels, seating_capacity, maximum_velocity):

self.number_of_wheels = number_of_wheels

self.seating_capacity = seating_capacity

self.maximum_velocity = maximum_velocity

我們Car類(lèi)的實(shí)現(xiàn):

my_car = Car(4, 5, 250)

print(my_car.number_of_wheels)

print(my_car.seating_capacity)

print(my_car.maximum_velocity)

一旦初始化,我們就可以使用所有創(chuàng)建的實(shí)例變量。太棒了。

在 Python 中,我們將父類(lèi)作為子的參數(shù)來(lái)進(jìn)行繼承。 ElectricCar 類(lèi)可以繼承我們的 Car 類(lèi)。

class ElectricCar(Car):

def __init__(self, number_of_wheels, seating_capacity, maximum_velocity):

Car.__init__(self, number_of_wheels, seating_capacity, maximum_velocity)

就這么簡(jiǎn)單。我們不需要實(shí)現(xiàn)任何其他方法,因?yàn)檫@個(gè)類(lèi)已經(jīng)完成了父類(lèi)的繼承(繼承自 Car 類(lèi))。我們來(lái)證明一下:

my_electric_car = ElectricCar(4, 5, 250)

print(my_electric_car.number_of_wheels) # => 4

print(my_electric_car.seating_capacity) # => 5

print(my_electric_car.maximum_velocity) # => 250

干的漂亮。

就到這吧!

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3614

    瀏覽量

    93686
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4792

    瀏覽量

    84627

原文標(biāo)題:Python 密集知識(shí)點(diǎn)匯總

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言鏈表知識(shí)點(diǎn)(2)

    C語(yǔ)言鏈表知識(shí)點(diǎn)(2)
    發(fā)表于 08-22 10:38 ?325次閱讀
    C<b class='flag-5'>語(yǔ)言</b>鏈表<b class='flag-5'>知識(shí)點(diǎn)</b>(2)

    【信盈達(dá)】C語(yǔ)言知識(shí)點(diǎn)的總結(jié)

    、算法說(shuō)明:學(xué)習(xí)單片機(jī)C般只需要前9個(gè)知識(shí)點(diǎn)即可進(jìn)行產(chǎn)品開(kāi)發(fā),但要學(xué)習(xí)嵌入式C還需要要掌握:指針、結(jié)構(gòu)體、鏈表、宏定義等知識(shí)點(diǎn)。二、單片機(jī)C、嵌入式C、標(biāo)準(zhǔn)C區(qū)別:這三C
    發(fā)表于 10-08 14:41

    關(guān)于《Python編程入門(mén)系列教程》說(shuō)明及教程匯總

    ),隨著版本的不斷更新和語(yǔ)言新功能的添加,越多被用于獨(dú)立的、大型項(xiàng)目的開(kāi)發(fā)。Python一種解釋型腳本語(yǔ)言,可以應(yīng)用于以下領(lǐng)域:◆ Web
    發(fā)表于 06-23 10:10

    STM32L151固件庫(kù)編程知識(shí)點(diǎn)匯總,不看肯定后悔

    STM32L151固件庫(kù)編程知識(shí)點(diǎn)匯總,不看肯定后悔
    發(fā)表于 11-23 07:39

    STM32編程的C語(yǔ)言基礎(chǔ)知識(shí)點(diǎn)匯總,不看肯定后悔

    STM32編程的C語(yǔ)言基礎(chǔ)知識(shí)點(diǎn)匯總,不看肯定后悔
    發(fā)表于 11-25 07:34

    STM32F103固件庫(kù)編程知識(shí)點(diǎn)匯總,錯(cuò)過(guò)絕對(duì)后悔

    STM32F103固件庫(kù)編程知識(shí)點(diǎn)匯總,錯(cuò)過(guò)絕對(duì)后悔
    發(fā)表于 12-14 06:54

    GDB的知識(shí)點(diǎn)匯總,絕對(duì)實(shí)用

    GDB的知識(shí)點(diǎn)匯總,絕對(duì)實(shí)用
    發(fā)表于 12-24 06:01

    關(guān)于匯編語(yǔ)言知識(shí)點(diǎn)匯總,絕對(duì)實(shí)用

    關(guān)于匯編語(yǔ)言知識(shí)點(diǎn)匯總,絕對(duì)實(shí)用
    發(fā)表于 01-18 07:32

    java基礎(chǔ)知識(shí)點(diǎn)匯總

    Java是門(mén)面向?qū)ο?b class='flag-5'>編程語(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強(qiáng)大和
    的頭像 發(fā)表于 04-26 10:53 ?6395次閱讀

    PHP基礎(chǔ)學(xué)習(xí)知識(shí)點(diǎn)匯總免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是PHP基礎(chǔ)學(xué)習(xí)知識(shí)點(diǎn)匯總免費(fèi)下載。
    發(fā)表于 04-24 16:45 ?6次下載
    PHP基礎(chǔ)學(xué)習(xí)<b class='flag-5'>知識(shí)點(diǎn)</b><b class='flag-5'>匯總</b>免費(fèi)下載

    Python的基礎(chǔ)語(yǔ)法知識(shí)點(diǎn)大全

    本文檔的主要內(nèi)容詳細(xì)介紹的是Python的基礎(chǔ)語(yǔ)法知識(shí)點(diǎn)大全。
    發(fā)表于 06-12 08:00 ?1次下載

    Python知識(shí)點(diǎn)總結(jié)詳細(xì)說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Python知識(shí)點(diǎn)總結(jié)詳細(xì)說(shuō)明。
    發(fā)表于 09-29 17:13 ?14次下載
    <b class='flag-5'>Python</b>的<b class='flag-5'>知識(shí)點(diǎn)</b>總結(jié)詳細(xì)說(shuō)明

    Python一種什么語(yǔ)言,它可以用來(lái)做些什么

    的Basic語(yǔ)言,適合網(wǎng)頁(yè)編程的Java語(yǔ)言等,Python是他們其中的一種。 首先,我們普及
    發(fā)表于 04-12 10:56 ?1284次閱讀

    數(shù)字電子技術(shù)重要知識(shí)點(diǎn)匯總

    數(shù)字電子技術(shù)重要知識(shí)點(diǎn)匯總免費(fèi)下載。
    發(fā)表于 07-06 17:06 ?50次下載

    C語(yǔ)言最重要的知識(shí)點(diǎn)

    C語(yǔ)言知識(shí)點(diǎn)總結(jié).doc
    發(fā)表于 02-16 16:37 ?9次下載
    RM新时代网站-首页