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):新式類按廣度優先來繼承
#廣度優先效率高