Python3 基礎 物件導向高階程式設計(上)

2021-07-25 21:53:13 字數 1691 閱讀 7810

在python中,我們可以動態的為類和物件繫結屬性和方法。

給例項繫結屬性和方法:

# 為例項繫結屬性 name

>>> class people():

... pass

...

>>> p = people()

>>> p.name = 'kd'

>>> p.name

'kd'

>>> print(p.name)

kd# 為例項繫結方法

>>> def setage(self,age):

... self.age = age

...

>>> from types import methodtype

>>> p.setage = methodtype(setage,p)

>>> p.setage(22)

>>> p.age

22

但是,給乙個例項繫結的方法,對另乙個例項是不起作用的。我們可以給class繫結,這樣所有的例項都可以訪問了。

people.setage = setage

>>> p.setage(23)

>>> p.age

23

但是,如果我們想要限制例項的屬性怎麼辦?比如,只允許對people例項新增name和age屬性。

為了達到限制的目的,python允許在定義class的時候,定義乙個特殊的__slots__變數,來限制該class例項能新增的屬性:

class people(object):

__slots__ = ('name', 'age') # 用tuple定義允許繫結的屬性名稱

就上面這個例子來說,如果繫結其他引數,則會報錯 attributeerror 。

使用__slots__要注意,__slots__定義的屬性僅對當前類例項起作用,對繼承的子類是不起作用的。除非在子類中也定義__slots__,這樣,子類例項允許定義的屬性就是自身的__slots__加上父類的__slots__

python內建的 @property 裝飾器就是負責把乙個方法變成屬性呼叫的。

class student():

@property

def score(self):

return self._score

@score.setter

def score(self,v):

if not isinstance(v,int):

raise valueerror('parameters type wrong!')

if v < 0 or v > 100:

raise valueerror('must between 0 ~ 100')

self._score = v

在使用的時候直接: 物件.屬性名 、物件.屬性名 = 什麼什麼 。

Python3 物件導向高階1

目錄封裝 訪問限制 property 多型抽象類 鴨子型別 1 class other def func self print from other class foo def init self self.other other def func self self.other.func foo ...

Python3學習筆記之物件導向高階程式設計

使用 property 在前面我們已經知道可以給類的例項繫結任何變數,而實際上作為動態語言的特點,不僅可以繫結變數,還可以給例項繫結方法,具體做法為 class student object pass.s student defset age self,age self.age age.from t...

物件導向 高階

json方式的物件導向 json 把方法包在json裡 json物件導向 有人管他叫 命名空間 在公司裡 把同一類 的方法包在一起 拖拽和繼承 物件導向的拖拽 改寫原有的拖拽 繼承 asdf 拖拽 instanceof 檢視物件是某個類的例項 使用繼承 限制範圍的拖拽類 建構函式的偽裝 屬性的繼承 ...