Python基礎——6面向對象編程

類和實例

類是抽象的模版,例如汽車;而實例則是擁有相同方法的類的實現,例如汽車裏面有大衆、寶馬、奔馳等等,這些車都能在地面上跑,可是它們的具體數據能夠不同。python

calss Student(object)  #object是全部類的父類,若是沒有繼承的父類就填該類
pass           #定義類是經過pass關鍵字,以後能夠實例化具體的類

calss Student(object)  #類的實例
   def  __init__(self,name,age)#特殊函數__init__
       self.name = name
       self.age = age
   def speak(self,word = ‘nihao’)
      print(word + self.name)

python的實例是動態語言,因此容許用戶自由綁定任何數據,例子:後端

student  =  Student(syz,18)
student.score = 100

訪問限制

對於不想讓外部訪問的變量或者數據,能夠定義私有變量,變量前面添加兩個下劃線__name,那麼將不能經過student.__name的方式直接訪問,實現原理是在內部生成_Student__name變量代替__name變量,可是此時注意,不要認爲調用student.__name  = syz的方式修改,由於此時至關於添加了一個__name的變量,而程序的self__的變量並無變。函數

爲了獲得或者修改私有變量,須要定義修改函數或者獲取函數對象

def set_name(self,name):
    self.__name = name
def get_name(self):
    return self.__name

注意:__abc__先後都有雙下劃線的變量時特殊變量,函數能夠直接訪問,注意私有變量不要這樣定義。blog

私有變量跟前面的內部變量仍是有區別的,由於前邊只加一個下劃線的變量屬於內部變量,原則上仍是能夠被外部變量訪問的。繼承

繼承和多態

子類定義能夠繼承父類,而且能夠在父類的基礎上作修改,從而體現多態性。get

例子:input

def Animal(object):
    def run(self):
        print(‘I’m running’)

def Dog(Animal):
def run(self):
        print(‘A dog running’)
    pass

def Cat(Animal):
def run(self):
        print(‘A cat running’)
    pass

鴨子類型,只要有相應的方法,就看作是相似的。只要會跑就把他看作鴨子it

獲取對象信息

isinstance(‘123’,str) class

True

getattr()   setattr()   hasattr()

# 首先你有一個command.py文件,內容以下,這裏咱們倘若它後面還有100個方法

class MyObject(object):
    def __init__(self):
        self.x = 9
    def add(self):
        return self.x + self.x

    def pow(self):
        return self.x * self.x

    def sub(self):
        return self.x - self.x

    def div(self):
        return self.x / self.x
# 而後咱們有一個入口文件 exec.py,要根據用戶的輸入來執行後端的操做
from command import MyObject
computer=MyObject()

def run():
    inp = input('method>')

    if inp == 'add':
        computer.add()
    elif inp == 'sub':
        computer.sub()
    elif inp == 'div':
        computer.div()
    elif inp == 'pow':
        computer.pow()
    else:
        print('404')

上面使用了if來進行判斷,那麼倘若個人command裏面真的有100個方法,那我總不可能寫100次判斷吧,因此這裏咱們就會用到python的反射特性,看下面的代碼

from command import MyObject
computer=MyObject()
def run(x):
    inp = input('method>')
    # 判斷是否有這個屬性
    if hasattr(computer,inp):
    # 有就獲取而後賦值給新的變量
        func = getattr(computer,inp)
        print(func())
    else:
    # 沒有咱們來set一個
        setattr(computer,inp,lambda x:x+1)
        func = getattr(computer,inp)
        print(func(x))

if __name__ == '__main__':
    run(10)
相關文章
相關標籤/搜索