Python學習之路 類的命名空間和組合

2021-09-14 00:15:03 字數 2917 閱讀 5359

建立乙個類就會建立乙個類的命名空間,用來儲存類中定義的所有名字,這些名字稱為類的屬性

而類有兩種屬性:靜態屬性和動態屬性

注意:使用物件修改類裡的靜態屬性,無法修改類裡的靜態屬性,會在物件的命名空間建立乙個和靜態屬性同名的元素,且以後都無法呼叫類裡的靜態屬性,只能刪了物件記憶體空間裡同名的元素,才能呼叫靜態屬性。

建立乙個物件/例項就會建立乙個物件/例項的命名空間,存放物件/例項的名字,稱為物件/例項的屬性

在物件自身的命名空間裡先找需要的元素,找不到則去類中找,類也找不到就找父類...最後都找不到就丟擲異常

軟體重用的重要方式除了繼承之外還有另外一種方式,即:組合

組合指的是,在乙個類中以另外乙個類的物件作為資料屬性,稱為類的組合

class weapon:

def prick(self, obj): # 這是該裝備的主動技能,扎死對方

obj.life_value -= 500 # 假設攻擊力是500

class person: # 定義乙個人類

role = 'person' # 人的角色屬性都是人

def __init__(self, name):

self.name = name # 每乙個角色都有自己的暱稱;

self.weapon = weapon() # 給角色繫結乙個**;

egg = person('egon')

egg.weapon.prick()

#egg組合了乙個**的物件,可以直接egg.weapon來使用組合類中的所有方法

圓環是由兩個圓組成的,圓環的面積是外面圓的面積減去內部圓的面積。圓環的周長是內部圓的周長加上外部圓的周長。

這個時候,我們就首先實現乙個圓形類,計算乙個圓的周長和面積。然後在"環形類"中組合圓形的例項作為自己的屬性來用

from math import pi

class circle:

'''定義了乙個圓形類;

提供計算面積(area)和周長(perimeter)的方法

'''def __init__(self,radius):

self.radius = radius

def area(self):

return pi * self.radius * self.radius

def perimeter(self):

return 2 * pi *self.radius

circle = circle(10) #例項化乙個圓

area1 = circle.area() #計算圓面積

per1 = circle.perimeter() #計算圓周長

print(area1,per1) #列印圓面積和周長

class ring:

'''定義了乙個圓環類

提供圓環的面積和周長的方法

'''def __init__(self,radius_outside,radius_inside):

self.outsid_circle = circle(radius_outside)

self.inside_circle = circle(radius_inside)

def area(self):

return self.outsid_circle.area() - self.inside_circle.area()

def perimeter(self):

return self.outsid_circle.perimeter() + self.inside_circle.perimeter()

ring = ring(10,5) #例項化乙個環形

print(ring.perimeter()) #計算環形的周長

print(ring.area()) #計算環形的面積

用組合的方式建立了類與組合的類之間的關係,它是一種『有』的關係,比如教授有生日,教授教python課程

class birthdate:

def __init__(self,year,month,day):

self.year=year

self.month=month

self.day=day

class couse:

def __init__(self,name,price,period):

self.name=name

self.price=price

self.period=period

class teacher:

def __init__(self,name,gender,birth,course):

self.name=name

self.gender=gender

self.birth=birth

self.course=course

def teach(self):

print('teaching')

p1=teacher('egon','male',

birthdate('1995','1','27'),

couse('python','28000','4 months')

) print(p1.birth.year,p1.birth.month,p1.birth.day)

print(p1.course.name,p1.course.price,p1.course.period)

'''

執行結果:

1 27

python 28000 4 months

'''

當類之間有顯著不同,並且較小的類是較大的類所需要的元件時,用組合比較好

Python學習之路 類繼承

如果兩個類具有同名的屬性和方法的時候就可以使用繼承,例如b類繼承a類,那麼在b類中就有類a中的屬性以及方法。被繼承的類叫做父類,繼承的而得類叫做子類。繼承是物件導向程式設計的第二個特性。一般來說,父類是一些公有的屬性和方法,因此類的繼承能夠減少 的冗餘,提公升 的可讀性,提高開發效率。幾乎在所有物件...

Python的學習之路

最最重要的是,python廣泛應用於自動化辦公 自動化運維 開發 網路爬蟲 大資料分析 資料探勘 科學計算 機器學習 深度學習 神經網路等領域。python該怎麼學 多練習 冰凍三尺非一日之寒!我們在學習當中必然遇到枯燥難學的知識點,所以我們要不停的練習,會當臨絕頂,一定先爬山多寫,學習過程是乙個爬...

Python學習之路

python 十分鐘入門 python 菜鳥教程 pycharm安裝numpy python 檔案讀取 with open xml path,r as fr content fr.read python讀取檔案時提示 unicodedecodeerror gbk codec can t decode...