python面向對象(一)

現在的編程語言基本分爲三種,第一類是面向機器的語言,代表的就是彙編,保留了機器語言的外形,即由操作碼和地址碼組成指令這個外形;第二類就是面向過程的語言,代表的就是C語言,結構化程序設計語言,是高級語言的一種。在面向過程程序設計中,問題被看作一系列需要完成的任務,函數則用於完成這些任務,解決問題的焦點集中於函數;第三類就是面向對象的語言,代表的就是C++、python、Java,是一類以對象作爲基本程序結構單位的程序設計語言,指用於描述的設計是以對象爲核心,而對象是程序運行時刻的基本成分。語言中提供了類、繼承等成分,有識認性、多態性、類別性和繼承性四個主要特點!
其中python應該是比較簡單的面向對象的語言了,下面就簡單寫一下個人的學習過程!

  • 類和實例

    類(class)和實例(instance)是重要的概念,類可以抽象出一個個的對象,由對象衍生一些百花繚亂的方法(注:在面嚮對象語言中稱方法,面向過程中叫做函數,其實也已經淡化了,無-所-謂,但是顯得牛),python用class定義一個類,後面一般加上 (object) ,如果定義的類是由繼承而來,此時需要將object換成繼承的父類,如果此類非繼承而來,可不寫!

class Student(object):   #定義的類首字母大寫。記得加冒號
    def __init__(self,age,name):  #當我們創建實例的時候可能需要綁定一些屬性,此時需要__init__方法,此方法的第一個參數一定是self,表示實例其本身,其中的age,name是實例屬性
        self.name = name    #這句話的意思比較多,self是創建的實例本身,好似Java中的this,self.name是一個類屬性,就是將外部name的值賦給類屬性,從而調用!
        self.age = age

s = Student('xmc',24)  #類的實例化,當定義了__init__時,需要加上初始化的值
print(s.name)      #xmc
print(s.age)       #24
  • 訪問限制

python有類屬性和實例屬性,其實還有一個比較常用的私有屬性,當然了,私有屬性並不意味着不可以訪問,只是告訴別人我是私有的,受保護的,不要隨便訪問和修改!!!下面看代碼.

class Student(object): #所有的類都是由object類繼承而來,所以可以這樣寫
    def __init__(self,name,age):
        self.__name = name  #在實例的變量前面加上 __ 表示變爲了私有變量,不可以在外部訪問了,更加不能夠修改!
        self.__age = age
    #當然了,python提供了一系列的訪問以及修改私有變量的值的函數,訪問(get_name),修改(set.age)
    def get_name(self):
        return self.__name

    def get_age(self):
        return self.__age

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

    def set_age(self,age):
        self._age = age

s = Student('xmc',24)
print(s.get_name()) #xmc
s.set_name('xu')
print(s.get_name()) #xu

print(s._Person__name)  # xu能直接訪問__name是因爲Python解釋器對外把__name變量改成了_Student__name,所以,仍然可以通過_Person__name來訪問__name變量
  • 繼承和多態

類的繼承和多態在面向對象的語言中最爲常見和使用!繼承的類稱爲子類,被繼承的類成爲父類,超類或者基類!還是看代碼吧!

class Animal(object):
    def bark(self):
        print('I am animal')

class Dog(Animal):
    def bark(self):
        print('I am dog')

class Cat(Animal):
    def bark(self):
        print('I am cat')

animal = Animal()    #類的實例化
animal.bark()       #調用bark
dog = Dog()
dog.bark()
cat = Cat()
cat.bark()
pirnt(isinstance(animal,Animal))   # True   isinstance是一個判斷變量是否匹配一個類型的方法
print(isinstance(cat,Animal))    #True  因爲Cat類是由Animal類繼承而來的,所以說cat屬於Animal類型的沒有任何錯誤!

def run(x):
    x.bark()

run(Animal()) #I am Animal
  • 實例屬性和類屬性

    由於python語言的動態性,所以類的實例可以任意綁定屬性!一般來說,實例屬性是由實例變量綁定或者由self來綁定!至於類屬性,相當於C語言中的全局變量,在方法之外綁定!但是實例屬性的優先級高於類屬性!

class Student(object):
    x = 'xmc'    #類屬性
    def __init__(self,name):    #name是實例屬性
        self.name = name

s = Student('xu')   #類的實例化
print(s.x)       #xmc   打印x屬性,但是實例並沒有x屬性,所以繼續查找得到類屬性
print(s.name)     #xu   
print(Student.x)    #xmc   直接打印類屬性
s.x = '66'          
print(s.x)      #66    
print (Student.x)     #xmc    雖然實例屬性已經修改了,但是類屬性並沒有改變,所以類屬性中的X仍然還是 xmc!

進一步的面向對象晚點奉上!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章