Python物件導向 --- 新舊式類、私人方法、類屬性和類方法、靜態方法

來源:互聯網
上載者:User

標籤: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物件導向 --- 新舊式類、私人方法、類屬性和類方法、靜態方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.