Python中面向對向介紹及類的屬性和方法
阿新 • • 發佈:2018-12-05
1.面向物件介紹
類和物件:是面向物件中兩個重要概念
類:是物件對事物的抽象,比如人類\球類
物件:是類的一個例項,比如足球\籃球
例項說明:
球類可以對球的特徵和行為進行抽象,然後可以例項化一個真實的球體出來
為什麼面向物件?
面向物件的主要思想是
-
封裝
-
繼承
-
多型
這種思想方面解決較為複雜的專案,而且維護起來較為容易
Python類定義
類定義: 類把需要的變數和函式組合成一起,這種包含稱為"封裝", class A(object): 類的結構: class 類名 成員變數-屬性 成員函式-方法
類的建立
class MyClass(object):
def fun(self):
print ("i am function")
類的方法中至少有一個引數self
類指令碼舉例:
class People(object): color = 'yellow' def think(self): self.color = "black" print "I am a %s " % self.color print ("I am a thinker") ren = People() print ren.color ren.think()
2.類的屬性
成員變數
物件的建立
建立物件的過程稱之為例項化,當一個物件被建立後,包含三個方面的特性物件聚丙屬性和方法,
控制代碼用於區分不同的物件,
物件的屬性和方法,與類中的成員變數和成員函式對應,
obj = MyClass()建立類的一個例項,擴號物件,通過物件來呼叫方法和屬性
類的屬性
類的屬性按使用範圍分為公有屬性和私有屬性類的屬性範圍,取決於屬性的名稱,
共有屬性---在內中和內外都能夠呼叫的屬性
私有屬性---不能在內外貝類以外函式呼叫
定義方式:以""雙下劃線開始的成員變數就是私有屬性
可以通過instance.classnameattribute方式訪問,
內建屬性--由系統在定義類的時候預設新增的由前後雙下劃線構成,如
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
ren = People()
ren.color = '白色人'
print ren.color
ren.think()
print '#'*30
print("People.color")
print ren.__People__age ##測試時使用。如要呼叫 時,通過方法內呼叫 。
3.類的方法
成員函式
類的方法
方法的定義和函式一樣,但是需要self作為第一個引數.
類方法為:
- 公有方法
- 私有方法
- 類方法
- 靜態方法
公有方法:在類中和類外都都測呼叫的方法.
私有方法:不測被類的外部呼叫模組,在方法前加個“__”c雙下劃線就是私有方法。
self引數:
用於區分函式和類的方法(必須有一個self)
self引數表示執行物件本身
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def test(self):
self.think() # 內部呼叫
jack = People()
jack.test() #外部呼叫
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
def test(self):
self.__talk() # 內部呼叫talk()
jack = People()
jack.test() #外部呼叫
類方法
類方法:被classmethod()函式處理過的函式,能被類所呼叫,也能被物件所呼叫(是繼承的關係)。
靜態方法:相當於“全域性函式”,可以被類直接呼叫,可以被所有例項化物件共享,通過staticmethod()定義靜態方法, 靜態方法沒有self引數
裝飾器:
@classmethod()
@staticmethod()
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
def test(self):
print 'Testing....'
cm = classmethod(test)
jack = People()
People.cm()
通過類方法類內的方法 ,不涉及的屬性和方法 不會被載入,節省記憶體,快。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
def test(): ##沒有self 靜態呼叫 會把所有的屬性載入到記憶體裡。
print People.__age # 通過類訪問內部變數
sm = staticmethod(test)
jack = People()
People.sm()
裝飾呼叫類的方法:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
class People(object):
color = 'yellow'
__age = 30 #私有屬性
def think(self):
self.color = "black"
print "I am a %s " % self.color
print ("I am a thinker")
print self.__age
def __talk(self):
print "I am talking with Tom"
@classmethod #呼叫類的方法
def test(self):
print ("this is class method")
@staticmethod #呼叫類的方法
def test1():
print ("this is static method")
jack = People()
People.test()
People.test1()