Python物件導向

2021-08-17 06:27:42 字數 3063 閱讀 8030

以檔案為單位組織模組,以目錄為單位組織多個模組,目錄必須包含__init__.py,用於表示目錄本身這個模組,主要知識點:

class

homo

(animal, monkey):

name = 'class variable'

# 類屬性,所有例項共享

def__init__

(self):

# 初始化函式

animal.__init__()

monkey.__init__()

print('homo init')

self.public = 'public'

# 公有變數

self._private_public = 'private_public'

# 約定形式的私有變數,外部可訪問

self.__private = 'private'

# 私有變數,方法也一樣,使用__字首表示私有

defsay_hello

(self):

# 所有方法第乙個引數都為self

print('hello')

x = homo() # homo init

x.say_hello() # hello

類例項可以動態新增屬性和方法,可通過__slots__限制此種行為,類物件也可動態新增屬性和方法,對所有例項均有影響,且不受__slots__影響。

class

homo

(): __slots__ = ('name', 'age')

p = homo()

p.x = 1

# error

homo.x = 1;

homo.x # 1

p.x # 1

繼承的子類不受__slots__約束,除非子類本身也申明__slots__屬性。

通過裝飾器方式,宣告get/set訪問器。

class

homo:

@property

defname

(self):

return self._name

@name.setter # 如果沒有setter只有property,則表示屬性唯讀

defname

(self, value):

print('set name')

self._name = value # 可檢查輸入有效性

p = homo()

p.name = 'shasha'

# set name

p.name # shasha

類似tostring,定義__str__()__repr__()方法,__str__為print服務,__repr__為除錯輸出服務。

class

homo:

def__init__

(self):

self.name = 'shasha'

def__str__

(self):

return

'home: %s' % self.name

__repr__ = __str__

p = homo()

p # home: shasha

可迭代物件的兩個屬性,支援這兩個方法可被for-in遍歷。

class

iterable:

def__iter__

(self):

return self

def__next__

(self):

return

2;i = iterable()

next(i) # 2

next(i) # 2

支援下標訪問,或者切片操作

class

list_like:

def__getitem__

(self, n):

if isinstance(n, int):

return n

if isinstance(n, slice):

return [n.start, n.stop]

l = list_like()

l[0] # 0

l[1] # 1

l[1 : 10] # [1, 10]

動態屬性獲取,當訪問例項物件上不存在的屬性或方法時,會呼叫該方法。

class

homo:

def__getattr__

(self, attr):

return attr

p = homo()

p.*** # ***

p.yyy # yyy

宣告物件callable,可以直接通過例項呼叫,且可使用callable()函式判斷物件是否是callable的。

class

homo:

def__call__

(self):

print('call __call__')

p = homo();

p() # call __call__

from enum import enum

type = enum('type', ('a', 'b', 'c'))

type.a == 'a'

# false

type.a == type.a # true

for name, member in type.__members__.items():

print(name, member) # a type.a

type()函式可用來建立類,python內部遇到類定義時也是通過type()建立類。

部落格原文

python物件導向學習 python物件導向學習

物件導向最重要的概念就是類 class 和例項 instance 必須牢記類是抽象的模板,比如student類,而例項是根據類建立出來的乙個個具體的 物件 每個物件都擁有相同的方法,但各自的資料可能不同。物件導向三個概念 1.封裝 即把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法讓可信的類進...

python物件導向總結 Python物件導向總結

python 物件導向 oop 1 物件導向 是乙個更大封裝,把乙個物件封裝多個方法 2 類 是對一些具有相同特徵或行為的事物的乙個統稱,是抽象的,不能直接使用 特徵被稱為屬性 行為被稱為方法 3 物件 是由類建立出來的乙個具體的存在,可以直接使用 先有類再有物件,類只有乙個,而物件可以有多個 類中...

python登入物件導向 python 物件導向

一 屬性和方法 1.a a 例項屬性 通過例項物件來新增的屬性就是例項屬性 a.count 10 例項方法都是在類中直接定義的 以self為第乙個引數的方法都是例項方法 當通過例項物件呼叫時,會自動傳遞當前物件作為self傳入 當通過類物件呼叫時,不會自動傳遞self a.test 等價於 a.te...