天天看點

面向對象

dog例子開頭

class dog:

    def __init__(self,name):

        self.name = name

    def bulk(self):

        print("%s:wang wang wang!"%self.name)

d1 = dog("陳榮華")

d2= dog("陳三炮")

d3=dog("陳老炮")

d1.bulk()

d2.bulk()

d3.bulk()

cs遊戲

class role():  #類名

    n = 123 #類變量 用途:大家共用的屬性

    n_list=[]

    name = "我是類name"

    def __init__(self, name, role, weapon, life_value=100, money=15000):

        #構造函數

        #在執行個體化時做一些類的初始化的工作

        self.name = name  #執行個體變量(靜态屬性) 作用域就是執行個體本身

        self.role = role

        self.weapon = weapon

        self.__life_value = life_value # 加_ _ 私有屬性

        self.money = money

    def __del__(self):

        print("%s 徹底挂了。。。"%self.name)

    def __shot(self): #類的方法(函數) 功能(動态屬性)

        print("shooting...")  #__shot(self) 私有方法

    def got_shot(self):

        print("%s ah...,i got shot..."%self.name)

    def buy_gun(self, gun_name):

        print("%sjust bought %s" %(self.name,gun_name))

    def show_status(self): #定義通路私有屬性的方法 私有屬性内部可以通路

        self.__life_value -=50

        r1.got_shot()

        print("name:%s,weapon:%s life_value:%s"%(self.name,self.weapon,self.__life_value))

#print(role.n)

r1 = role('alex', 'police', 'ak47')#把一個類變成一個具體對象的過程叫執行個體化 執行個體化(初始化一個類,造了一個對象)

r1.buy_gun("ak47")

r1.got_shot()

print(r1.show_status()) #通路私有屬性

#print(r1.__life_value) 私有屬性之後外面通路不了

#del r1 驗證析構函數

#r1.__shot() 私有方法,外面通路不了

r2 = role('jack', 'terrorist', 'b22')

r2.got_shot()

'''

r1.name="陳榮華" #修改屬性

r1.bullet_prove=true #添加屬性

r1.n="改的類變量" #相當于給r1新加了一個屬性

r1.n_list.append("from r1")

print(r1.weapon)

del r1.weapon #删除屬性

#print(r1.weapon)

print("r1:",r1.n,r1.name,r1.bullet_prove) #變量先找執行個體本身,在去類裡面找

#

#r1.got_shot()

r2 = role('jack', 'terrorist', 'b22')  #生成一個角色 role的執行個體

r2.name="徐良偉"

print("r2:",r2.n,r2.name)

r2.n_list.append("from r2")

#r2.got_shot() #role.got_shot(r2)

#r1.buy_gun("ak47")

role.n="abc"

print(role.n)

print(r1.n,r2.n) #改的類變量隻對r2有效

print(r2.n_list) #對于類的清單,類,執行個體共用同一塊記憶體位址,是以改了執行個體改了類清單,對類和其他執行個體都有效,都會跟着改

print(role.n_list)

繼承詳解

#class people: 經典類

class people(object): #新式類

    def __init__(self,name,age):

        self.name=name

        self.age=age

        self.friends=[]

    def eat(self):

        print("%s is eating...."%self.name)

    def talking(self):

        print("%s is talking..."%self.name)

    def sleep(self):

        print("%s is sleeping..."%self.name)

class relation(object): #沒有構造函數就去父類people裡面找obj.name

    def make_friends(self,obj): #調用的時候已經執行個體化完成

        print("%s is making friend with %s"%(self.name,obj.name))

        self.friends.append(obj)

class man(relation,people): #繼承people 多繼承

    '''

    def __init__(self,name,age,money): #初始化的時候要将父類的參數寫進去 加上money 重構了父類

        #people.__init__(self,name,age) #調用父類的方法 經典類寫法

        super(man,self).__init__(name,age) #兩種方法 推薦用這種方法 新式類寫法

        self.money=money  #添加的參數

        print("%s 一出生就有%s money"%(self.name,self.money))

    def piao(self):

        print("%s is piaoing...20s...done"%self.name)

        people.sleep(self) # 重構父類方法 添加新功能 self執行父類傳進去

        print("man is sleeping")

class women(people,relation): #多繼承

    def get_birth(self):

        print("%s is born a baby..."%self.name)

#m1=man("niuhanyang",22,10)

m1=man("niuhanyang",22)

#m1.eat()

#m1.piao()

#m1.sleep()

w1 = women("chengronghua",26)

#w1.get_birth()

m1.make_friends(w1) #調用make_friends的時候已經執行個體化完成

w1.name="chensanpao"

print(m1.friends[0].name)

繼承schoolmember和person類  并重構teacher類

class teacher(schoolmember):

    def __init__(self,name,age,sex,salary,course):

        super(teacher,self).__init__(name,age,sex)

        self.person=person(self,obj)

        self.salary=salary

        self.course=course

繼承schoolmember和school類,并重構teacher類

        self.school=school_obj

本節筆記

#類變量用途:共用的屬性,節省開銷

class person:

    cn="中國"

    def __init__(self,name,age,addr,cn="china"):

#p1=person(name,age,addr)

#析構函數:在執行個體釋放,銷毀的時候自動執行的,通常用于做一些收尾工作,如關閉一些資料庫連接配接,關閉打開的臨時檔案,也叫析構方法

#私有方法,私有屬性

#繼承 節省代碼

#3.x版本統一按廣度優先來繼承(先找橫向的)

class a:

    def __init__(self):

        print("a")

class b(a):

    pass

#    def __init__(self):

 #       print("b")

class c(a):

 #   def __init__(self):

 #       print("c")

class d(b,c):

 #       print("d")

obj=d()

#2.x版本 class a:經典類按深度優先來繼承(先縱向方向找)  class a(object):新式類按廣度優先來繼承

#廣度優先效率高

繼續閱讀