python物件導向 二

2021-09-11 10:17:21 字數 3717 閱讀 6735

屬性查詢 類有兩種屬性:資料屬性和函式屬性

類的資料屬性是所有物件共享的

類的函式屬性是繫結給物件用的

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...