Python基礎之五面向物件程式設計
阿新 • • 發佈:2019-01-03
'''
面向物件程式設計————Object Oriented Programming,簡稱OOP,是一種程式設計思想。
OOP把物件作為程式的的基本單元,一個物件包含了資料和操作資料的函式.
面向過程的程式設計把計算機程式視為一系列的命令集合,及一組函式的順序執行。為了簡化程式設計,
面向過程吧函式繼續切分為子函式,把大塊函式通過切割成次凹函式來降低系統的複雜度
面向物件的程式設計把計算機程式視為一組物件的集合,而每個物件都可以接收其他物件發過來的訊息,
並處理這些訊息,計算機程式的執行就是一系列訊息在哥哥物件之間的傳遞
'''
'''
類和例項
面向物件那個最重要的概念就是類(Class)和例項(Instance),必須牢記類的抽象模板
而例項是根據類創建出來的一個個具體的"物件",每個物件都擁有相同的方法,單個字資料可能不同
'''
class Student(object):#定義一個類
pass
bart = Student()#例項化一個物件
print(bart)#列印這個物件
print(Student)
bart.name = 'Bart Simpson'#給Student物件賦值
print(bart.name)
class Student(object) :
def __init__(self, name, score):#__init__方法的第一個引數永遠是self,便是建立的例項本身
self.name = name#將資料繫結到self上
self.score = score
bart = Student('Bart Simpson', 59)#例項化物件
print(bart.name, bart.score)
'''
資料封裝
面向物件程式設計的一個重要特點就是資料封裝。
'''
class Student(object):
def __init__(self, name, score) :
self.name = name
self.score = score
def print_score(self):
print('%s: %s' % (self.name, self.score))
bart = Student('張三男', 89)
print(bart.print_score())
'''
小結
類是建立例項的模板, 而例項則是一個一個具體的物件,各個例項擁有的資料互相獨立,互不影響;
方法就是與例項繫結的函式, 和普通函式不同,方法可以直接訪問例項變數;
通過在例項上呼叫方法,我們就直接操作了物件內部的資料,但無需知道方法內部的實現細節。
和靜態語言不同,Python允許例項變數繫結任何資料,也就是說對於兩個例項變數,雖然他們都是同一類的不同例項,但擁有變數名稱都可能不同
'''
'''
訪問限制:
在Class內部,可以有屬性和方法,而外部程式碼可以通過直接呼叫例項變數的方法來操作資料,這樣就隱藏了內部的復邏輯
'''
class Student(object):
def __init__(self, name, score):
self.__name = name#設定為似有變數外部不可訪問
self.__score = score
def print_socre(self):
print('%s: %s' % (self.__name, self.__score))
def get_name(self):#需要獲得資料可以通過get方法
return self.__name
def get_score(self):
return self.__score
def set_name(self, name):
self.__name = name
def set_score(self, score):
self.__score = score
bart = Student('張三', 89)
print(bart.get_name())
print(bart.set_name("李四"))
print(bart.get_name())
'''
繼承和多型:
在OOP程式設計中,當我們能定義一個class的時候,可以從某個現有的class繼承,
新的class稱之為子類(Subclass),而被繼承的class稱之為基類,父類或者超類
'''
class Animal(object):#編寫個父類
def run(self):
print('Animal is runing...')
class Dog(Animal):#繼承Animal
pass
class Cat(Animal):
def run(self):
print('Cat is runing...')
dog = Dog()
print(dog.run())#子類擁有父類所有方法
cat = Cat()
print(cat.run())#子類可以複寫父類方法,實現自己內部邏輯
a = list()#a是一個list型別
b = Animal()#b 是Animal型別
c = Dog()#c是Dog型別
isinstance(a, list)#判斷一個變數是否是某個型別可以呀isinstance()判斷
print(isinstance(a, list))
print(isinstance(b, Animal))
print(isinstance(c, Dog))
print(c, Animal)
'''
獲取物件資訊:
type() 一般用於資料型別判斷
isinstance() 一般用於函式型別判斷
dir() 獲取物件的所有屬性和方法
'''
print(type(234))#基本型別可以用type()
print(type(abs))#一個變數指向函式或者類可以呀type()
print(isinstance(b, Animal))#判斷b是否是Animal型別
print(isinstance([1, 2, 3], (list,tuple)))#判斷一個變數是否是某些型別的一種
print(dir('ABC'))
'''
例項熟屬性和類屬性
'''