– 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 三部分有機的組成在一起。物件導向程式分析和物件導向設計需要用一種方式來描述和記...