python3 面向對象

    Python在設計之初就是一門面向對象的語言。

一、技術簡介

    類(class)用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。

    類變量類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。

    實例變量定義在方法中的變量,只作用於當前實例的類。

    方法類中定義的函數。

    對象通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。

    實例化創建一個類的實例,類的具體對象。

二、類

class Calculator:
	price = 11	#類變量
	def add(self,x,y):	#求和的一個方法;x,y都是實例變量
		print (self.price)	#調用類變量
		print(x+y)
	def divide(self,x,y):	#求商的一個方法
		print (x/y)
	def minus(self,x,y):	#求差的一個方法
		print (x-y)
cal = Calculator()	#類的實例化,cal就是一個對象
cal.add(2,3)	#調用類中的add方法
cal.divide(6,3)
cal.minus(3,2)


輸出結果爲:
11
5
2.0
1

很多類傾向於將對象創建爲有初始狀態的。因此類可能會定義一個名爲_init_()的特殊方法(構造函數)

class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i)   #輸出結果:3.0 -4.5

類的方法與普通的函數只有一個特別的區別,就是它們必須有一個額外的第一參數名稱,慣例名稱是self。其中self代表類的實例,而不是類。而且self不是關鍵字,可以隨意起名字。

三、類的繼承和方法的重寫

class parent:
	def child(self):
		print ('調用父類')
class Child(parent):		#繼承類parent
	pass
class Child_level(parent):	#繼承類parent
	def child(self):		#方法child的重寫
		print ('調用子類')
p = parent()
p.child()
c = Child()
c.child()
c_level = Child_level()
c_level.child()	

出現多個繼承時,注意圓括號中父類的順序,若是父類中有相同的方法名,而在子類使用時未指定,python從左至右搜索。

四、構造函數(__init__)

class Ball:
	def __init__(self,name,age):
		self.name = name
		self.age = age
		print (name,age)
	def kick(self):
		print ('我叫%s,今年%s.剛纔誰踢我。。'%(self.name,self.age))
c = Ball('土豆',22)
c.kick()

    init前後包含雙下劃線。

五、私有變量、方法

class person:
	__name = '鏈家網'
	def get_name(self):
		print (self.__name)
	def __getAge(self):
		print ('私有方法')
p = person()
p.get_name()
p._person__getAge()

私有變量只需在變量、方法前面添加“__”雙下劃線。私有變量原則上不允許外部訪問,但是python沒有絕對的私有,都是僞私有。可以通過“p._person__getAge()”、"p._person__name"直接訪問私有方法、變量。即通過“_類名__變量名”的樣式訪問。

六、小技巧

    類中組合,巧妙的避免了繼承

class Turtle:
	def __init__(self,x):
		self.num = x
class fish:
	def __init__(self,y):
		self.num = y
class Pool:
	def __init__(self,x,y):
		self.turtle = Turtle(x)	#組合(類的實例化放在一個類裏面)
		self.fish = fish(y)	#組合(類的實例化放在一個類裏面)
	def print_num(self):
		print ('水池中共有%s只甲魚,共有%d條魚'%(self.turtle.num,self.fish.num))
p = Pool(2,11)
p.print_num()


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