08 物件導向程式設計

2022-06-26 17:51:11 字數 4941 閱讀 4787

class

class1:

"""類的幫助資訊

"""pass

#沒有具體功能實現

c = class1() #

建立class1類的例項

print(c) #

<__main__.class1 object at 0x10ed722b0>

class

class1:

"""類的幫助資訊

"""def

__init__(self): #

構造方法

print("

我是class1類")

c = class1() #

建立class1類的例項

class

people:

"""people類

"""#

自定義引數

def__init__(self, name, age): #

構造方法

print("

我叫%s,今年%d歲了

" %(name, age))

p = people('

sam', 12) #

我叫sam,今年12歲了

類屬性
例項屬性
例項方法
class

people:

"""people類

"""name = '匿名'

#類屬性,可以通過例項名或類名訪問

age =0

#自定義引數

def__init__(self, name='', age=0): #

構造方法

people.name = name if name else

people.name

people.age = age if age else

people.age

print("

我叫%s,今年%d歲了

" %(people.name, people.age))

#self: 表示類的例項

def do(self, ing): #

例項方法

print

(ing)

p = people() #

我叫匿名,今年0歲了

p.do("寫字"

)print(people.age) #

0p2 = people('

tom', 12) #

我叫tom,今年12歲了

print(people.age) #12#

新增類屬性

people.other = '

other

'print(people.other) #

other

p.other = '

p_other

'print(p.other) #

p_other

class

class2():

def__init__

(self):

self.a = 1111 #

例項屬性,只能通過例項名訪問

c2 =class2()

print(c2.a) #

1111

#通過類名訪問例項屬性報錯

#class2.a # attributeerror: type object 'class2' has no attribute 'a'

#

以單下劃線開頭的表示protect(保護)型別的成員,只允許類本身和子類進行訪問,但不能使用

#from module import * 語句匯入

class

c1: _a = '

保護屬性'#

定義保護屬性

def__init__

(self):

print(c1._a) #

在例項方法中訪問保護屬性

c =c1()

print(c._a) #

通過例項名訪問保護屬性

print(c1._a) #

通過類名訪問保護屬性

class

c2:

__aa = '

私有屬性'#

定義私有屬性

def__init__

(self):

print(c2.__aa) #

在例項方法中訪問私有屬性

c2 =c2()

#通過例項名訪問私有屬性

#print(c2.__aa) #attributeerror: 'c2' object has no attribute '__aa'

#通過類名訪問私有屬性

#print(c2.__aa) #attributeerror: type object 'c2' has no attribute '__aa'

print(c2._c2__aa) #

私有屬性可以通過'例項名._類名__xx'方式訪問

print(c2._c2__aa) #

私有屬性可以通過'類名._類名__xx'方式訪問

class

c1:

def__init__

(self, w, h):

self.w =w

self.h =h

@property

#將方法轉換為屬性

defarea(self):

return self.w *self.h

c = c1(12, 12)

print(c.area) #

144

class

c1:

def__init__

(self, w, h):

self.

__res = w *h

@property

#將方法轉換為屬性

defarea(self):

return self.__res

#返回私有屬性

c = c1(12, 12)

print(c.area) #

144#

修改唯讀屬性儲存

#c.area = 12 # attributeerror: can't set attribute

屬性的setter方法:

class

c1: list_s = ['

a', '

b', 'c'

]

def__init__

(self, s):

self.

__res =s

@property

#將方法轉換為屬性

defarea(self):

return self.__res

#返回私有屬性

@area.setter

#設定setter方法,讓屬性可修改

defarea(self, value):

if value in

c1.list_s:

self.

__res = '

你選擇了

' +value

else

: self.

__res = '

你的選擇不存在

'c = c1('1'

)c.area = 'a'

print(c.area) #

你選擇了a

c.area = 'e'

print(c.area) #

你的選擇不存在

class

fruit:

color = '綠色'

defharvest(self, c):

print

(c)

print("

原來的顏色

" +fruit.color)

class

color = '紅色'

def__init__

(self):

print('')

def harvest(self, c): #

方法重寫

print

(c)

print

class

orange(fruit):

color = '橙色'

def__init__

(self):

print('

orange')

orange =orange()

orange.harvest(orange.color)##

紅色#紅色#

orange#橙色

#原來的顏色綠色

class

fruit:

def__init__

(self, c):

fruit.color =c

defharvest(self):

print("

原來的顏色

" +fruit.color)

class

def__init__

(self):

print('')

class

def__init__

(self, c):

#fruit.__init__(self,c) # 直接使用基類名呼叫__init__()方法

# super().__init__(c) #

呼叫基類的__init__()方法

print('')

##a.harvest() # attributeerror: type object 'fruit' has no attribute 'color'

red'

)a2.harvest()

035 物件導向 08

一 概念部分 a 方法的過載 是指同乙個類中可以定義有相同的名字,但引數 引數的個數 型別 順序 不同的多個方法。呼叫時,會根據不同的引數 引數的個數 型別 順序 選擇對應的方法 只要對呼叫者不產生歧義即可。構造方法也和普通方法一樣可以過載。二 什麼時候不構成方法的過載 a 返回值不同不構成方法的過...

Python物件導向08 多型

物件導向三大特性 封裝根據職責將屬性和方法封裝到乙個抽象的類中 繼承實現 的重用,相同的 不需要重複的編寫 多型不同的子類物件呼叫相同的父類方法,產生不同的執行結果 需求 在dog類中封裝方法game 定義xiaotiandog繼承自dog,並且重寫game方法 定義person類,並且封裝乙個和狗...

python 物件導向 08 多型

物件導向三大特性 封裝根據職責將屬性和方法封裝到乙個抽象的類中 繼承實現 的重用,相同的 不需要重複的編寫 多型不同的子類物件呼叫相同的父類方法,產生不同的執行結果 需求 在dog類中封裝方法game 定義xiaotiandog繼承自dog,並且重寫game方法 定義person類,並且封裝乙個和狗...