python_面向對象編程
阿新 • • 發佈:2019-02-01
-s 增加 數據屬性 自己 以及 應該 pan 編程 括號 小練習
初始面向對象
一、類的實例化:
調用類產生對象的過程稱為類的實例化,
實例化的結果是一個對象,或稱為一個實例
class People: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def run(self): print(‘%s is running‘ % self.name) obj = People(‘carter‘, 18, ‘male‘) # 會產生對象的名稱空間,如何查看 print(obj.__dict__)
print(obj.name)
實例化做了三件事
1、先產生一個空對象
2、自動觸發類內部__init__函數的執行
3、將空對象,以及調用類括號內傳入的參數,一同傳給__init__,為對象定制獨有的屬性
對象的增刪改查
obj.hobby = ‘beauty‘ # 增加 del obj.name # 刪除 obj.age = ‘20‘ # 修改 print(obj.__dict__) # 查找
二、對象屬性的查找順序:先找對象自己的名稱空間----》類的名稱空間
classPeople: x=1 def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def run(self): #self=obj print(‘%s is running‘ %self.name) #obj.name obj=People(‘carter‘,18,‘male‘) #People.__init__(obj,‘carter‘,18,‘male‘) obj1=People(‘carter1‘,18,‘male‘) #People.__init__(obj,‘carter1‘,18,‘male‘) obj2=People(‘carter2‘,18,‘male‘) #People.__init__(obj,‘carter2‘,18,‘male‘) #1、類的數據屬性:是給對象用的,而且直接共享給所有對象用的,內存地址都一樣 print(People.x) People.x=11111 print(id(People.x),People.x) obj.x=‘obj================》‘ print(id(obj.x),obj.x) print(id(obj1.x),obj1.x) print(id(obj2.x),obj2.x) # 2、類的函數屬性:也是給對象用,但是綁定給對象用的,綁定到不同的對象就是不同的 # 綁定方法,內存地址都不一樣,但其實只想都是同一個功能 print(People.run) # <function People.run at 0x00000226E7C78A60> People.run(123123) People.run(obj) print(obj.run) print(obj1.run) print(obj2.run)
三、綁定方法的特殊之處:
1、 綁定給誰就應該由誰來調用,
2、誰來調用就會把誰當做第一個參數傳入
class People: x=1 def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def run(self): #self=obj print(‘%s is running‘ %self.name) #obj.name def f1(): print(‘from f1‘) def f2(self): pass obj=People(‘carter‘,18,‘male‘) #People.__init__(obj,‘carter‘,18,‘male‘) obj.run() obj1.run() obj2.run() print(People.f1) People.f1() print(obj.f1) obj.f1() #People.f1(obj)
小練習
class People: def __init__(self, name, aggressiveness, life_value): self.name = name self.aggressiveness = aggressiveness self.life_value = life_value def bite(self, enemy): enemy.life_value -= self.aggressiveness print(""" [%s]咬了一條[%s] 狗掉血[%s] 狗還剩血量[%s] """ % (self.name, enemy.name, self.aggressiveness, enemy.life_value)) class Dog: def __init__(self, name, aggressiveness, life_value): self.name = name self.aggressiveness = aggressiveness self.life_value = life_value def bite(self, enemy): enemy.life_value -= self.aggressiveness print(""" [%s]咬了一個[%s] 人掉血[%s] 人還剩血量[%s] """ % (self.name, enemy.name, self.aggressiveness, enemy.life_value)) p1 = People(‘人‘, 60, 100) d1 = Dog(‘狗‘, 80, 200) p1.bite(d1) d1.bite(p1)人狗大戰
from math import pi class Circle: ‘‘‘ 定義了一個圓形類; 提供計算面積(area)和周長(perimeter)的方法 ‘‘‘ def __init__(self,radius): self.radius = radius def area(self): return pi * self.radius * self.radius def perimeter(self): return 2 * pi *self.radius circle = Circle(10) #實例化一個圓 area1 = circle.area() #計算圓面積 per1 = circle.perimeter() #計算圓周長 print(area1,per1) #打印圓面積和周長計算圓面積和周長
python_面向對象編程