Python之類、方法、繼承
阿新 • • 發佈:2022-04-01
一、類
面向過程的語言:C語言
A、屬性
B、方法(就是之前學習的函式)
4、
object是所有類的物件,可以說是類的祖先
類的內部的show是一個方法,self指的是類本身自己
obj:1、它是一個變數,2、它是類的物件
class Person(object):#建立類,類名稱的首字母必須是大寫,括號裡面是類的基類
def show(self):#建立類中的函式時(self)是特殊引數,必須要寫
print("hello") #函式的表示式
obj=Person()# 把類進行例項化
obj.show() # 用物件呼叫類Person中的函式
5、
class Person(object): def __init__(self,name,age): self.name=name self.age=age def show(self): print("my name is {0} and my age is {1}".format(self.name,self.age)) obj=Person(name="wp",age=22) # 類的例項化 obj.show()
# obj可以理解為類的物件,也可以將他理解為一個變數,所以obj可以簡單的理解為給類定義的物件 # 類中例項方法呼叫的方式: # 第一種:物件、方法,也就是類物件呼叫類的方法。 obj=person(name="wp",age=22) name="wp",age=22是對例項屬性賦值的過程,obj第一個物件。 obj.name()——呼叫方法,呼叫的是name的方法。 obj2=person(name="wt",age=22) name="wt",age=22是對例項屬性賦值的過程,obi2第二個物件。 obj2.name()——呼叫方法,呼叫的是name的方法 #第二種:類/方法(self,引數值),此方式需要手動給 self 引數傳值,也就是類名直接呼叫類的方法。 obj1=person(name="wp",age=22) person.name(obj1)
class Person(object): # 資料屬性,只能通過類名或者類的物件呼叫 city="西安" def __init__(self,name,age): self.name=name self.age=age def show(self): print("my name is {0} and my age is {1},city is {2}".format(self.name,self.age,self.city)) obj=Person(name="wp",age=22) obj.show() # 對資料屬性而言,使用類以及類物件呼叫,記憶體地址都是一致的 print(id(Person.city)) print(id(obj.city))
呼叫方法執行順序
2、執行真正呼叫的方法
3、執行析構方法
class Person(object): city="西安" def __init__(self,name,age): self.name=name self.age=age print("初始化") def show(self): print("my name is {0} and my age is {1},city is {2}".format(self.name,self.age,self.city)) # 析構方法,價值:清理 def __del__(self): print("清理") obj=Person(name="wp",age=22) obj.show()
1、普通方法
如show(),info()
class Person(object): def __init__(self,name,age): self.name=name self.age=age def show(self): #封裝一個檢視Person屬性的函式 print("name:{0} age:{1}".format(self.name,self.age)) obj=Person(name="wp",age=22) #把類Person例項化為obj obj.show() #呼叫方法
2、特性方法
只具備只讀屬性,不能寫(這個方法中不能有形式引數)
呼叫特性方法的時候,沒有括號
類內部定義的以@staticmethod裝飾的函式,類方法的呼叫關係可以通過print後的表述得知,輸出結果
# 特性方法 class Person(object): def __init__(self,name,age): self.name=name self.age=age @property #裝飾器 def show(self): return "name:{0} age:{1}".format(self.name,self.age) obj=Person(name="wp",age=22) #把類Person例項化為obj print(obj.show) #呼叫方法
3、靜態引數
理解為全域性變數,但是不能等價於全域性變數,靜態方法的特點是使用類名來直接呼叫
靜態方法(staticmethod)中不能夠呼叫例項屬性
@property裝飾器
getInfo:獲取資訊
# 靜態方法
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
@staticmethod #裝飾器
def show():
return {"name":"wp","age":22}
print(Person.show())
三、繼承
1、Java與Python的繼承區別
1.1、Python是一個類可以繼承N個類
1.2、Java只能繼承一個類
2、概念
2.1、基類(父類):被繼承的類
2.2、派生類(子類):繼承其他的類
在實戰中Animal是父類,Person是子類
子類繼承父類的例項屬性,兩種方式:
第一種方式:
super().__init__(name,age)
第一種方式:
Animal.__init__(self,name,age)
self.work=work
父類繼承子類的內容
1、資料屬性
2、例項屬性
3、方法
# 父輩繼承子類方法
class Animal(object):
address="地球"
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
return "name:{0},age:{1}".format(self.name,self.age)
class Person(Animal):
def __init__(self,name,age,work):
Animal.__init__(self,name,age)
self.work=work
def show(self):
print("person中的方法")
obj=Person(name="wp",age=22,work="測試")
obj.show()# 類B中本來是沒有這個方法的,但是它繼承了A類,所以可以直接呼叫A類中的方法
4、繼承的原則
1、從左到右
2、從下到上
方法重寫
# 父輩資訊
class Animal(object): address="地球" def __init__(self,name,age): self.name=name self.age=age def show(self): return "name:{0},age:{1}".format(self.name,self.age)
# 子輩資訊 class Person(Animal): def __init__(self,name,age,work): Animal.__init__(self,name,age) self.work=work def info(self): print("來自:{0},資訊:{1}".format(self.address,self.show())) def show(self): print("person中的方法") obj=Person(name="wp",age=22,work="測試") obj.show()
錯誤的繼承方式
父類與子類在呼叫時,不可以同時出現在同一方法中,否則會報錯