現在的編程語言基本分爲三種,第一類是面向機器的語言,代表的就是彙編,保留了機器語言的外形,即由操作碼和地址碼組成指令這個外形;第二類就是面向過程的語言,代表的就是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!
進一步的面向對象晚點奉上!!!