1. 程式人生 > >七、Python入門-面向物件

七、Python入門-面向物件

面向物件

認識面向物件

  概念:面向物件(Object Oriented)是軟體開發方法。

  特徵:封裝 繼承 多型

類的建立

  類包括屬性和方法。

  屬性包括例項變數和類變數

類的例項化

  例項化是指在面向物件的程式設計中,把用類建立物件的過程稱為例項化。是將一個抽象的概念類,具體到該類實物的過程

self關鍵字和初始化方法

  self:隱式將物件作為引數傳遞self,所以在例項化物件時不需要傳遞,表示當前物件

#7.2.類的建立
class Dog(object):

    typee="寵物" #類變數

    #初始化方法
    def __init__(self, name,age,color):        #self表示當前物件
        self.name = name    #例項變數(屬性)
        self.age = age
        self.color = color

    #普通方法    
    def eat(self):
        print(self.name,"啃骨頭!")

    def run(self,speed):
        print("{0}{1}跑路".format(self.name,speed)) #格式化輸出
        print(self.name+speed+"跑路")
        #↑相當於print(dog.name+speed+"跑路")    

#7.3.例項化物件 && 7.4.self關鍵字和初始化方法
dog=Dog("小黑",3,"白色")        #隱式將dog傳遞給self
#訪問屬性
print(dog.name)
print(dog.age)
print(dog.color)
#設定屬性
dog.color="黑色"        
print(dog.color)
#呼叫方法
dog.eat()
dog.run("飛快的")

類的封裝

  私有:__bal  只允許內部訪問,提高安全性,並沒有完全私有化

class Card(object):

    def __init__(self, num,pwd,bal):
        self.num = num    #卡號
        self.pwd = pwd    #密碼
        self.__bal = bal    #餘額

    def save(self):
        print("存款!")

    def getBal(self,numm,pwdd):
        if(numm==self.num and pwdd==self.pwd):
            return self.__bal
        else:
            return "輸入錯誤"    

card=Card("1001","123456",1000)    #開卡

#訪問私有屬性
print(card.getBal("1001","123123"))    
print(card.getBal(card.num,card.pwd))    
print(card._Card__bal)            #python提供直接訪問的方法        

類的繼承和多型

  繼承:子類(派生類)繼承父類(基類)的屬性和方法  

  多型:相同方法名,不同的方法實現(重寫) 

#繼承
class Animal(object):    #Animal繼承object

    def __init__(self, color):
        self.color = color

    def eat(self):
        print("吃!")

    def run(self):
        print("跑!")


#不呼叫父類的init
class Dog(Animal):    #Dog繼承Animal
    def __init__(self, name,hobby):    #同名,重寫
        self.name=name
        self.hobby=hobby    

    def eat(self):        #同名,重寫
        print("啃骨頭")

dog=Dog("小黑","讀書")        #呼叫的是自己的__init__
dog.eat()                    #呼叫的是自己的eat
dog.run()                    #呼叫父類的run


#呼叫父類的init
class Dog2(Animal):    #Dog2繼承Animal
    def __init__(self, name,hobby,color):    
        super(Dog2, self).__init__(color)    #呼叫父類的初始化函式
        self.name=name
        self.hobby=hobby    

    def eat(self):        
        print("我也啃骨頭")


dog2=Dog2("小黑","讀書","黑色")        
print(dog2.color)


#多型
def Eat(obj):
    obj.eat()

animal=Animal("黃色")
Eat(animal)
Eat(dog)
Eat(dog2)