面向對象是一門編程思想python
類指的是類型,一系列對象之間相同的特徵與技能的結合體編程
在現實世界中,先有對象再定義出類,類是抽象產生的,對象是實際存在的函數
在程序中,必須先定義類,而後再調用類獲得返回值獲得對象學習
先從現實世界中經過對象來總結出類,而後再定義類,經過調用類來產生對象大數據
語法:class + 類的名字:(類名要是駝峯體)設計
對象之間相同的特徵(數據屬性,變量)code
對象之間相同的技能(類中的方法,函數)對象
調用類的過程稱爲類的實例化,產生的對象也能夠稱爲類的一個實例內存
調用類產生對象時發生的事情:it
# 定義一個People類名,注意使用駝峯體 class People: country = '中國' def __init__(self,name,age,sex): # 給對象添加新屬性 self.age = age self.name = name self.sex = sex #類裏面定義函數默認會傳入一個self當形參 def learn(self): print('學習技能') p1 = People('shen', 18, 'male') print(p1.name) # shen print(p1.age) # 18 print(p1.sex) # male #直接經過類來調用類中的函數須要傳入任意一個參數給self People.learn(111) #經過對象來調用類中的函數,不須要傳入參數,由於對象會被當作參數傳入 p1.learn()
經過類.__ dict __ 或 對象.__ dict__ 查看類與對象的名稱空間,也能夠經過.__ dict __['類或對象中的名字']直接查看值
# # 定義一個People類名,注意使用駝峯體 class People: country = '中國' def __init__(self,name,age,sex): self.age = age self.name = name self.sex = sex #類裏面定義函數默認會傳入一個self當形參 def learn(self): print('學習技能') p1 = People('shen', 18, 'male') print(p1.__dict__) # {'age': 18, 'name': 'shen', 'sex': 'male'} print(p1.__dict__['age']) # 18 print(People.__dict__) # {'__module__': '__main__', 'country': '中國', '__init__': <function People.__init__ at 0x000002CCD9AC2B88>, 'learn': <function People.learn at 0x000002CCD9AC6DC8>, '__dict__': <attribute '__dict__' of 'People' objects>, '__weakref__': <attribute '__weakref__' of 'People' objects>, '__doc__': None} print(People.__dict__['country']) # 中國 print(People.__dict__['learn']) # <function People.learn at 0x0000015CFB1A6DC8>
class People: country = '中國' def __init__(self,name,age,sex): self.age = age self.name = name self.sex = sex #類裏面定義函數默認會傳入一個self當形參 def learn(self): print('學習技能') p1 = People('shen', 18, 'male') # 查 print(p1.country) # 中國 # 改 p1.country = 'China' print(p1.country) # China # 刪 del p1.sex print(p1.sex) # 刪除後報錯 # 增 People.salary = 150000000000 print(People.salary) # 150000000000 print(p1.salary)# 150000000000
p1 = People('shen', 18, 'male') p2 = People('shen1', 19, 'male') p3 = People('shen2', 20, 'male') print(p1.country, id(p1.country)) # 中國 1853896576144 print(p2.country, id(p2.country)) # 中國 1853896576144 print(p3.country, id(p3.country)) # 中國 1853896576144 調用類中的方法,id相同,只是傳入的對象給self不一樣因此方法不一樣 print(People.learn, id(People.learn)) # <function People.learn at 0x000002A39FF26DC8> 2901786389960 print(p1.learn, id(p1.learn)) #<bound method People.learn of <__main__.People object at 0x00000153E75690C8>> 1459724834120 print(p2.learn, id(p2.learn)) #<bound method People.learn of <__main__.People object at 0x00000153E73BF708>> 1459724834120 print(p3.learn, id(p3.learn)) #<bound method People.learn of <__main__.People object at 0x00000153E73BF588>> 1459724834120
由對象來調用類裏面的函數稱爲對象的綁定方法
對象的綁定方法的特殊之處:
對象.屬性:先從對象自身的名稱空間中查找——》類的名稱空間中查找——》再找不到會報錯
用type方法打印出有
str1 = '沈' print(type(str1)) # <class 'str'> list1 = [1, 2, 3] print(type(list1)) # <class 'list'>