標籤:3.x 成績 語句 底線 計數器 特徵 back 類對象 str
一、Python物件導向中的新舊式類
1)新式類(推薦使用):在定義類時,類後邊括弧裡要繼承基類(object)。在python3.x中若沒有指定父類,會預設使用的是object作為基類;在python2.x中,若沒指定父類,則不會以object作為基類。
2)舊式類(經典類):在定義類時,類後邊括弧中不用繼承object類,甚至不用括弧。
3)dir方法是用來查看類的內建方法。
二、私人方法和屬性
1)私人屬性是對象不希望公開的屬性;私人方法是對象不希望公開的方法。在定義私人屬性和方法時,在屬性或方法名之前添加 __(兩個底線)
#定義一個man類
class Man(object):
def __init__(self,name,age):
self.name = name
self.__age = age # 定義一個私人屬性age
def __secret(self):
print "%s的年齡是:%s" %(self.name,self.__age)
def test(self): # 公有類可以調用私人屬性和私人方法
self.__secret()
demo = Man(‘demo‘,18)
# 不能訪問私人屬性
# print demo.age
# 也不能訪問私人方法
# demo.secret()
demo.test()
2)繼承中私人屬性和私人方法問題:子類不可以繼承父類的私人屬性和私人方法
class A(object):
def __init__self(self,name):
self.__age = 18 # 定義一個私人屬性和公有屬性
self.name = name
def __secret(self):
print "%s的年齡是%s" %(self.name,self.__age)
class B(A):
def test(self):
print self.name
# 不能訪問父類私人屬性和方法
# print self.__age
# self.__secret()
demo = A(‘demo‘)
# 在外界也不可以訪問父類的私人屬性和方法
demo.test
三、類屬性和類方法
1)類對象:類是一個特殊的對象,也叫類對象。故類對象也有自己對應的屬性和方法,叫做類屬性和類方法。
2)類屬性:就是給類對象定義的屬性;通常用來記錄與類相關的特徵;不會記錄具體對象的特徵。在class關鍵字的下方定義。
3)類方法:針對類對象定義的方法;在類方法內部只可以調用類屬性或類方法。定義格式為:@classmethod def 類名(): pass
class Toy(object):
count = 0 # 使用指派陳述式定義類屬性
def __init__(self,name):
self.name = name
Toy.count += 1 # 每次建立對象,計數器加1
@classmethod # 定義類方法的標識
def show_toy_count(cls):
print "玩具對象的數量為%d" %cls.count
# 建立玩具對象
toy1 = Toy(‘樂高‘)
toy2 = Toy(‘玩具車‘)
Toy.count # 調用類屬性
Toy.show_toy_count() # 調用類方法
四、靜態方法
1)靜態方法:在開發的時候,如果需要在類中封裝一個方法;這個方法不需要訪問執行個體屬性或者執行個體方法,也不需要訪問類屬性或類方法;此時我們可以把這個方法封裝為靜態方法。定義格式為:@staticmethod def 類名(): pass
class Cat(object):
@staticmethod
# 不能訪問執行個體屬性/類屬性
# 靜態方法不需要傳遞第一個參數self
def call():
print "喵喵喵~~~"
# 通過 ‘類名.靜態方法‘ 來調用;(不需要建立對象就可以直接調用靜態方法)
Cat.call()
五、類對象、類屬性、靜態方法的綜合執行個體
1)需求:設計一個game類
屬性:定義一個屬性top_score記錄遊戲的曆史最高分(類屬性)
定義一個屬性player_name記錄當前遊戲玩家的玩家姓名(執行個體屬性)
方法:
show_help顯示遊戲協助資訊(靜態方法,自己的參數)
show_top_socre顯示曆史最高分(類方法,參數為cls)
start_game開始當前玩家的遊戲(執行個體方法,參數為self)
import random
class Game(object):
top_score = 0 # 定義一個類屬性,計算最高成績
def __init__(self, name):
self.play_name = name
Game.top_score = 0 # 初始化為0
@staticmethod
def show_help(): # 定義靜態函數
print "遊戲協助"
print "隨機產生1-10的數字。猜三次!第一次猜對10分;第二次猜對5分,第三次猜對3分;猜不對0分!猜完之後,會記錄你的最高成績!"
def start_game(self): # 定義執行個體方法
num = random.randint(1, 10)
score = 0
for i in range(3):
guest = int(raw_input("請輸入猜測的數字:"))
if guest == num:
if i == 0:
score += 10
break
elif i == 1:
score += 5
break
else:
score += 3
break
else:
score = 0
print "小明的成績為%d" % score
if score > Game.top_score:
Game.top_score = score
@classmethod
def show_top_socre(cls): # 建立一個類方法,顯示遊戲的最高成績
print "顯示最高成績:%s" % cls.top_score
# 查看遊戲協助
Game.show_help()
# 建立玩遊戲對象
xming = Game(‘小明‘)
# 開始玩遊戲
xming.start_game()
# 查看曆史最高分
Game.show_top_socre()
執行個體總結:
1、執行個體方法:方法內部需要訪問執行個體屬性。
2、類方法:方法內部‘只’訪問類屬性
3、靜態方法:方法內部,不需要訪問執行個體屬性和類屬性
4、在方法內部,既需要訪問執行個體屬性,有需要訪問類屬性,則可以定義為執行個體方法
Python物件導向 --- 新舊式類、私人方法、類屬性和類方法、靜態方法