屬性查詢 類有兩種屬性:資料屬性和函式屬性
類的資料屬性是所有物件共享的
類的函式屬性是繫結給物件用的
class beijingstudent:
school='beijing'
def learn(self):
print('is learning')
def eat(self):
print('is eating')
def sleep(self):
print('is sleeping')
s1=beijingstudent()
s2=beijingstudent()
s3=beijingstudent()
#類的資料屬性是所有物件共享的,id都一樣
print(id(beijingstudent.school))
print(id(s1.school))
print(id(s2.school))
print(id(s3.school))'''
4377347328
4377347328'''
#類的函式屬性是繫結給物件使用的,obj.method稱為繫結方法,記憶體位址都不一樣
#ps:id是python的實現機制,並不能真實反映記憶體位址,如果有記憶體位址,還是以記憶體位址為準
print(beijngstudent.learn)
print(s1.learn)
print(s2.learn)
print(s3.learn)'''
>
>
>'''
複製**
在obj.name會先從obj自己的命名空間裡找name,找不到則去類中找,類也找不到就找父類...最後都找不到就丟擲異常
繫結到物件的方法的特殊之處
#改寫
class beijingstudent:
school='beijing'
def __init__(self,name,age,***):
self.name=name
self.age=age
self.***=***
def learn(self):
print('%s is learning' %self.name) #新增self.name
def eat(self):
print('%s is eating' %self.name)
def sleep(self):
print('%s is sleeping' %self.name)
s1=beijingstudent('李坦克','男',18)
s2=beijingstudent('王大炮','女',38)
s3=beijingstudent('牛榴彈','男',78)
複製**
類中定義的函式(沒有被任何裝飾器裝飾的)是類的函式屬性,類可以使用,但必須遵循函式的引數規則,有幾個引數需要傳幾個引數
beijingstudent.learn(s1) #李坦克 is learning
beijingstudent.learn(s2) #王大炮 is learning
beijingstudent.learn(s3) #牛榴彈 is learning
複製**
類中定義的函式(沒有被任何裝飾器裝飾的),其實主要是給物件使用的,而且是繫結到物件的,雖然所有物件指向的都是相同的功能,但是繫結到不同的物件就是不同的繫結方法
強調:繫結到物件的方法的特殊之處在於,繫結給誰就由誰來呼叫,誰來呼叫,就會將『誰』本身當做第乙個引數傳給方法,即自動傳值(方法__init__也是一樣的道理)
s1.learn() #等同於beijingstudent.learn(s1)
s2.learn() #等同於beijingstudent.learn(s2)
s3.learn() #等同於beijingstudent.learn(s3)
複製**
注意:繫結到物件的方法的這種自動傳值的特徵,決定了在類中定義的函式都要預設寫乙個引數self,self可以是任意名字,但是約定俗成地寫出self。
類即型別
python中一切皆為物件,且python3中類與型別是乙個概念,型別就是類
#型別dict就是類dict
list
'list'>
#例項化的到3個物件l1,l2,l3
l1=list()
l2=list()
l3=list()
l1[3]l2
>>> l3
l3[111]
複製**
物件之間的互動
class garen: #定義英雄蓋倫的類,不同的玩家可以用它例項出自己英雄;
camp='demacia'
#所有玩家的英雄(蓋倫)的陣營都是demacia;
def __init__(self,nickname,aggressivity=58,life_value=455): #英雄的初始攻擊力58...;
self.nickname=nickname #為自己的蓋倫起個別名;
self.aggressivity=aggressivity #英雄都有自己的攻擊力;
self.life_value=life_value #英雄都有自己的生命值;
def attack(self,enemy): #普通攻擊技能,enemy是敵人;
enemy.life_value-=self.aggressivity #根據自己的攻擊力,攻擊敵人就減掉敵人的生命值。
複製**
我們可以仿照garen類再建立乙個riven類
class riven:
camp='noxus'
#所有玩家的英雄(銳雯)的陣營都是noxus;
def __init__(self,nickname,aggressivity=54,life_value=414): #英雄的初始攻擊力54;
self.nickname=nickname #為自己的銳雯起個別名;
self.aggressivity=aggressivity #英雄都有自己的攻擊力;
self.life_value=life_value #英雄都有自己的生命值;
def attack(self,enemy): #普通攻擊技能,enemy是敵人;
enemy.life_value-=self.aggressivity #根據自己的攻擊力,攻擊敵人就減掉敵人的生命值。
複製**
例項出倆英雄
g1=garen('草叢倫')
r1=riven('銳雯雯')
複製**
互動:銳雯雯攻擊草叢倫,反之一樣
g1.life_value
455r1.attack(g1)
g1.life_value
401複製**
補充:
garen_hero.q()稱為向garen_hero這個物件傳送了一條訊息,讓他去執行q這個功能,類似的有:
garen_hero.w()
garen_hero.e()
garen_hero.r()
複製**
python 物件導向(二)
class a def bar self print bar 這裡面的self相當於c,也就是從d 開始重新找 self.f1 class b a def f1 self print b class c def f1 self print c class d c,b pass c d c.bar b...
python學習(二) 物件導向
物件導向的方法簡介 類 class 方法重寫 override 繼承 例項化 類的方法必須要加乙個self引數 class classname def init self name salary self 是指類的例項而不是類 self name name 建立類物件 x class1 這是通過呼叫...
python之物件導向二
什麼時候用到多型?如果我們需要用到父類的方法的時候而且要修改父類方法的時候,或者想呈現出不同的效果是就會用到多型 這裡舉個小例子 class person object def get name self print 張三 class studens person 繼承自person類 def ge...