classclass1:
"""類的幫助資訊
"""pass
#沒有具體功能實現
c = class1() #
建立class1類的例項
print(c) #
<__main__.class1 object at 0x10ed722b0>
classclass1:
"""類的幫助資訊
"""def
__init__(self): #
構造方法
print("
我是class1類")
c = class1() #
建立class1類的例項
classpeople:
"""people類
"""#
自定義引數
def__init__(self, name, age): #
構造方法
print("
我叫%s,今年%d歲了
" %(name, age))
p = people('
sam', 12) #
我叫sam,今年12歲了
類屬性
例項屬性
例項方法
classpeople:
"""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): #
例項方法
(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'方式訪問
classc1:
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
classc1:
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方法:
classc1: 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) #
你的選擇不存在
classfruit:
color = '綠色'
defharvest(self, c):
(c)
print("
原來的顏色
" +fruit.color)
class
color = '紅色'
def__init__
(self):
print('')
def harvest(self, c): #
方法重寫
(c)
class
orange(fruit):
color = '橙色'
def__init__
(self):
print('
orange')
orange =orange()
orange.harvest(orange.color)##
紅色#紅色#
orange#橙色
#原來的顏色綠色
classfruit:
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類,並且封裝乙個和狗...