1. 程式人生 > 遊戲 >Epic喜加一:《改造火星》免費領取

Epic喜加一:《改造火星》免費領取

Python是一門面向物件的語言,在Python中建立一個類和物件是很容易的
1、面向物件技術:
類(Class): 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。
類變數:類變數在例項化的物件中是公用的,類變數定義在類中且在函式體之外,類變數通常不作為例項變數使用。
資料成員:類變數或者例項變數用於處理類及其例項物件的相關的資料。
方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
例項變數:定義在方法中的變數,只作用於當前例項的類。
繼承:即一個派生類(derived class)繼承基類(base class)的欄位和方法。
例項化:建立一個類的例項,類的例項是一個具體的物件。
方法:類中定義的函式。
物件:通過類定義的資料結構例項。物件包括兩個資料成員(類變數和例項變數)和方法。
2、類定義:
class Complex:
def __init__(self,real,imag):
self.r=real
self.i=imag
例項:
x=Complex(3.0,-4.5)
建構函式:類傾向於將物件建立為有初始狀態。因此類可能會定義一個名為 init() 的特殊方法(構造方法)
def __init__(self):
self.data=[]
類定義了 init() 方法的話,類的例項化操作會自動呼叫 init() 方法。init() 方法可以有引數,引數通過 init() 傳遞到類的例項化操作。
self代表類的例項,代表當前物件的地址,而非類,self.class則指向類
類的方法第一個引數self
class Test:
def prt(self):
print(self)
print(self.__class__)

t=Test()
t.prt()
3、屬性和方法
類的方法:
在類地內部,使用def定義方法,類方法必須包含引數self, 且為第一個引數。
class people:
name=""
age=0
__weight=0 #類的私有屬性,在類外部無法直接進行訪問
def __init__(self,n,a,w):
self.name=n
self.age=a
self.__weight=w
def speak(self):
print("%s 說:我%d 歲。"%(self.name,self.age))
print("%s 說:我體重%d 斤。"%(self.name,self.__weight))
p=people("runoob",10,30)
p.speak()
print(p.name,p.age) # 這裡外面不能訪問p.__weight
類的私有屬性:兩個下劃線開頭,宣告為私有屬性,不能再類外部使用,只能在類內部使用。
類的私有方法:兩個下劃線開頭,宣告為私有方法,只能在類的內部呼叫,不能在類地外部呼叫
4、類的繼承與過載
派生類的定義:
class student(people): #派生自people類
grade=""
def __init__(self,n,a,w,g):
people.__init__(self,n,a,w) #呼叫父類建構函式
self.grade=g #覆寫父類的方法
def speak(self):
print("%s 說:我%d 歲了,我在讀%d年級。"%(self.name,self.age,self.grade))

s=student('chen',10,60,3)
s.speak()
Python支援多重繼承
class speaker():
topic=''
name=''
def __init__(self,n,t):
self.name=n
self.topic=t
def speak(self):
print("我叫%s,我是一個演說家,我演講的題目是%s"%(self.name,self.topic))
class sample(student,speaker): #多重繼承
a=''
def __init__(self,n,a,w,g,t):
student.__init__(self,n,a,w,g) #呼叫第一個父類的建構函式
speaker.__init__(self,n,t) #呼叫第二個父類的建構函式
test=sample("Tim",25,80,4,'python')
test.speak() #兩個父類都有speak函式,預設呼叫排在前面的父類的同名函式
方法重寫:
class Parent:
def myMethod(self):
print('呼叫父類方法')
class Child(Parent):
def myMethod(self): #相同的方法在子類中重寫了
print('呼叫子類方法')
c=Child()
c.myMethod() #子類呼叫的是重寫了的方法

類的專有方法:
__init__: 建構函式,在生成物件時呼叫
__del__: 解構函式,釋放物件時使用
__repr__: 列印,轉換
__setitem__ : 按照索引賦值
__getitem__: 按照索引獲取值
__len__: 獲得長度
__cmp__: 比較運算
__call__: 函式呼叫
__add__: 加運算
__sub__: 減運算
__mul__: 乘運算
__div__: 除運算
__mod__: 求餘運算
__pow__: 乘方

#運算子過載,對類的專有方法進行過載
class Vector:
def __init__(self,a,b):
self.a=a
self.b=b
def __str__(self):
return 'Vector (%d,%d)'%(self.a,self.b)
def __add__(self,other):
return Vector(self.a+other.a,self.b+other.b) #對+運算進行了運算子過載
v1=Vector(2,10)
v2=Vector(5,-2)
print(v1+v2)
結果:Vector(7,8)