day18 物件導向02 追加

2021-10-25 07:43:23 字數 3611 閱讀 7939

class

student

:"""人類"""

num =

61def

__init__

(self, name=

'張三'

, age=

18, gender=

'男')

: self.name = name

self.age = age

self.gender = gender

defeat(self, food=

"麵條"):

print

(f"在吃"

) @classmethod

defaction

(cls)

:print

(f"人類目前的數量是"

) @staticmethod

defdestroy()

:print

("人類破壞環境"

)# 1.類.__doc__ - 獲取類的說明文件

print

(student.__doc__)

# 人類

# 2.類.__module__ - 獲取指定類所在的模組

print

(student.__module__)

# __main__

# 3.物件.__class__ - 獲取指定物件對應的型別, 和type(物件)

p1 = student(

)print

(p1.__class__)

# print

(type

(p1))#

print

('abc'

.__class__)

# # 4.類.__name__ - 獲取類名(以字串形式)

print

('abc'

.__class__.__name__)

# str

datas =

['abc',-

0.41

,'你好',34

,90,12.7

]for data in datas:

with

open

(f'.txt'

,'a+'

, encoding=

'utf-8'

)as f:

f.write(

str(data)

+'\n'

)# 5.

# 類.__dict__ - 將類裝換成字典, key是欄位名, 值是字段對應的值

# 物件.__dict__ - 將物件轉換成字典, 物件屬性名作為key, 屬性值作為value

print

(student.__dict__)

print

(p1.__dict__)

# 6.

# 類.__base__ - 獲取指定類的父類

# 類.__bases__ - 獲取指定類所有的父類

# object是python中所有類的基類

print

(student.__base__)

# print

(student.__bases__)

# (,)

1

) getter:

什麼時候用:在獲取物件屬性前, 如果要別的什麼事情, 就可以給這個屬性新增getter

怎麼用:

第一步:在需要新增getter的屬性的屬性名前加_

第二步: 在裝飾器@property後面定義乙個函式,函式名就是屬性名去掉_,函式沒有引數,需要乙個返回值,

返回值就是獲取這個屬性值真正得到的結果

第三步: 通過物件獲取屬性的時候, 屬性不需要帶_

2) setter - 新增setter之前必須先新增getter

a.什麼時候用: 如果要在某個物件屬性賦值之前做別的什麼事情, 就給這個屬性新增setter

b.怎麼用:

第一步: 在需要新增setter的屬性名前加_

第二步: 在裝飾器@getter名.setter後面定義乙個函式;

函式名就是屬性名去掉_

函式有乙個引數(這個引數指向的時候賦值的時候賦的值)

, 沒有返回值

第三步: 通過物件給屬性賦值的時候,屬性不需要帶_

公開的: 公開的屬性和方法在類的內部、外部都可以用, 並且可以被繼承

保護的: 保護的屬性和方法在類的內部可以使用,外部不可以用, 但可以被繼承

私有的: 私有的屬性和方法在類的內部可以用, 外部不能用,不能被繼承

python中的屬性和方法只有一種訪問許可權: 公開的, 所謂的私有化是假的,只是一種宣告

私有化的方法:在屬性名和方法名前加__(注意: 只能是兩個__開頭,不能再用__結尾)

class

person

: num =

100 __info =

'動物'

print

(person.num)

# print(person.__info) # type object 'person' has no attribute '__info'

python在使用運算子的時候本質是在呼叫運算子對應的方法

每個運算子對應的方法的方法名是固定的, 不同型別的資料在參與相同的運算的時候是呼叫不同類中對應的方法

某個型別的資料是否支援某種運算,就看這個資料對應的型別中有沒有實現這個運算子對應的方法

練習:

class

person

:def

__init__

(self, name=

'小明'

, age=

18, gender=

'男')

: self.name = name

self.age = age

self.gender = gender

def__repr__

(self)

:return f'<>'

def__lt__

(self, other)

:if self.age <= other.age:

return self.age, other.age

# 練習:將ps中的元素按照年齡的大小從小到大排序

p1 = person(

)p2 = person(

'小花',28

,'女'

)p3 = person(

'張三',20

,'男'

)p4 = person(

'老王',25

,'男'

)ps =

[p1, p2, p3, p4]

print

(ps)

# 方法一: 新增魔法方法

print

(sorted

(ps)

)# 方法二: 使用內建sort方法

ps.sort(key=

lambda item: item.age)

print

(ps)

day 18 物件導向的 繼承

一 概念性知識 物件導向的三大特徵 繼承,多型,封裝 繼承是建立新類的一種方法,在python中,新建的類可以繼承乙個或多個父類,父類稱作基類或超類,新建的類又稱作派生類或子類。繼承的好處 可以節約 提高了 的復用性 提高了 的維護性 類與類之間產生了關係,是多型的前提 初識繼承 子類以及子類的物件...

閉關日記 Day18

陰。好幾天沒更新日記了,說一下這幾天完成的事和正在做的事。專案f基本完結,專案b在除錯相容 360瀏覽器缺省會進入相容模式來渲染 練車 1號考科三 翻譯 uwp設計指南 當前進度1 時間碎片管理的uwp著手開發 專案t 另外,乙個學長想讓我幫忙做乙個h5小遊戲,在溝通中。target 003 時長 ...

前端學習Day18

一 3d的旋轉 增加了rotatez 和 rotate3d x,y,z,度數 注 x y z 它們是乙個向量值,0是不旋轉,1是旋轉 eg rotate3d 1,1,0,45deg 等價於 rotatex 45deg rotatey 45deg 二 3d的縮放 增加了 scalez 和 scale3...