Python 物件導向程式設計2

2021-08-28 14:10:17 字數 2924 閱讀 6142

– start

object 類是所有類的父類,它定義了好多方法,重寫這些方法我們可以定製自己的類。

我們可以比較兩個數字的大小,那我們自定義的類可不可以呢?其實很簡單,我們只需要重寫 object 類中定義的比較方法即可。

class mynumber:

# 初始化屬性

def __init__(self, num):

self.num = num

# 大於

def __gt__(self, other):

return self.num > other.num

# 大於等於

def __ge__(self, other):

return self.num >= other.num

# 小於

def __lt__(self, other):

return self.num < other.num

# 小於等於

def __le__(self, other):

return self.num <= other.num

# 等於

def __eq__(self, other):

return self.num == other.num

# 不等於

def __ne__(self, other):

return self.num != other.num

x = mynumber(1)

y = mynumber(1)

print(x > y)

print(x >= y)

print(x < y)

print(x <= y)

print(x == y)

print(x != y)

我們在初級篇中演示了重寫 __ str__ 可以列印出友好的物件資訊。

class mynumber:

# 初始化屬性

def __init__(self, num):

self.num = num

# 提供物件描述,給機器看的

def __repr__(self):

# 使用 super 呼叫父類方法

return super().__repr__()

# 提供物件描述,給人看的

def __str__(self):

return str(self.num)

x = mynumber(1)

print(x)

print(str(x))

print(repr(x))

如果自定義類需要在 set 或 dict 中使用,需要實現 __ hash__ 方法

class point:

# 初始化屬性

def __init__(self, x, y):

self.x = x

self.y = y

# 提供物件描述,給人看的

def __str__(self):

return f'(, )'

# 提供物件描述,給機器看的

def __repr__(self):

return f'point(, )'

# 等於

def __eq__(self, other):

return self.x == other.x and self.y == other.y

# 如果自定義類需要在 set 或 dict 中使用,需要實現 __hash__ 方法

# 相等的物件必須返回同樣的 hash 值,所以我們必須實現 __eq__ 方法

def __hash__(self):

return hash((self.x, self.y))

p1 = point(1, 1)

p2 = point(1, 1)

s =

print(s)

我們知道任何物件都可以轉成布林型,事實上,乙個物件是真是假由__ bool__覺得。

class point:

# 初始化屬性

def __init__(self, x, y):

self.x = x

self.y = y

# 如何判斷物件真假

def __bool__(self):

return self.x != 0 or self.y != 0

print(bool(point(0, 0)))

print(bool(point(0, 1)))

python 支援多繼承,下面是乙個簡單的例子。

class a:

def a(self):

print('a.a')

class b:

def b(self):

print('b.b')

# 繼承 a 和 b

class c(a, b):

def c(self):

print('c.c')

c = c()

c.a()

c.b()

c.c()

python 支援多繼承,但是千萬不要濫用,不要為了使用某個類的方法去繼承某個類,這時候要使用組合,下面是乙個簡單的例子。

class a:

def a(self):

print('a.a')

class b:

# 傳入 a 物件

def __init__(self, a):

self.a = a

# 呼叫 a 方法

def b(self):

self.a.a()

print('b.b')

a = a()

b = b(a)

b.b()

python 物件導向程式設計 2

class testdemo money 1000 私有變數 def init self,name,note 類建構函式初始化資料 self.name name self.note note def calltest self 正常定義的函式 print 我是 self.name,代號 self.n...

Python物件導向程式設計(2)

建立類時,如果其中的部分屬性和方法與其他已有類相同,則可使用繼承。乙個類繼承另乙個類時,將自動繼承另乙個類的所有屬性和方法 除私有屬性和方法 原有的類稱為父類,新類稱為子類,子類繼承父類的所有屬性和方法,也可以有自己的屬性和方法,也可修改原來類中的方法。1.1 使用super方法 新建乙個名為stu...

2 物件導向程式設計

物件導向的設計實際上是由物件導向分析 object oriented analysis 物件導向設計 object oriented design 物件導向程式設計 object oriented programming 三部分有機的組成在一起。物件導向程式分析和物件導向設計需要用一種方式來描述和記...