組合就是把舊類例項化放到新類裡面進行呼叫,**如下
class
chairs()
:def
__init__
(self,x)
: self.num = x
class
glasses()
:def
__init__
(self,y)
: self.num = y
class
build()
:def
__init__
(self,x,y)
: self.chairs = chairs(x)
self.glassses = glasses(y)
defcall
(self)
:print
("chairs num is %d, glasses num is %d"
%(self.chairs.num,self.glassses.num)
)building = build(3,
5)building.call(
)
chairs num is 3, glasses num is 5
例項屬性和類屬性名字相同,例項屬性會把類屬性覆蓋掉
class
num():
count =
0a = num(
)b = num(
)c = num(
)print
(a.count, b.count, c.count)
a.count =
10print
(a.count, b.count, c.count)
num.count =
100print
(a.count, b.count, c.count)
#a.count沒變是因為在前面對a.count進行賦值的時候,例項屬性把類屬性覆蓋了
0 0 0
10 0 0
10 100 100
屬性名和方法名相同,屬性會覆蓋方法,**如下
class
num():
defx
(self)
:print
("right"
)a = num(
)a.x(
)a.x =
10print
(a.x)
a.x(
)
typeerror: 'int' object is not callable
right
10
tips:
1、不要在乙個類裡面定義出所有的特性和方法,應該利用繼承和組合機制進行拓展
2、用不同的詞性名命名,如屬性名用名詞,方法名用動詞
python嚴格要求方法需要有例項才能被呼叫,這種限制其實就是python所謂的繫結概念,**如下
class
num:
defx()
:print
("right"
)num.x(
)a = num(
)a.x(
)
typeerror: x() takes 0 positional arguments but 1 was given
right
哪怕把原始的類刪除了,但也不影響例項物件,**如下
classcc(
):defgetnum
(self, x, y)
: self.x = x
self.y = y
defcall
(self)
:print
(self.x, self.y)
dd = cc(
)dd.getnum(5,
6)dd.call(
)del cc
dd.getnum(7,
8)dd.call(
)
5 6
7 8
python入門 P37類和物件 物件導向程式設計
class相當於房子圖紙,每個物件是參照圖紙建立的實際的房子,self相當於每一棟房子的門牌號,在下面這段 裡,每個物件都是呼叫了自己那棟房子裡的方法,就是因為self tips 在方法裡,self必須是第乙個 class build def setname self,name self.name ...
python入門 P36類和物件 給大家介紹物件
下面展示一些python3建立類,類的屬性 方法,以及呼叫的 這裡還用到了多型,物件fighter和defender都呼叫了相同名字的方法,但卻實現的是不同的功能 tips 類的定義首字母一般大寫,方法一般小寫,便於區分 class fight define class name color gre...
C 類和物件入門
物件的含義是指具體的某乙個事物,即在現實生活中能夠看得見摸得著的事物。在物件導向程式設計中,物件所指的是計算機系統中的某乙個成分。在物件導向程式設計中,物件包含兩個含義,其中乙個是資料,另外乙個是動作。物件則是資料和動作的結合體。物件不僅能夠進行操作,同時還能夠及時記錄下操作結果。這是什麼玩意,通俗...