1. 程式人生 > >面象對象語法

面象對象語法

輸出 CA 現實 sleep list IV 語法 而且 第一個

  • 類:就是一系列對角相似的特征與技能的結合體,但站在不同的角度,得到的分類也是不同的

在現實中:先有對象,才有類
在程序中:一定先定義類,後調用類來產生對象

‘‘‘
在現實世界中:
    對象1:王二丫
        特征:
            學校=‘luffycity‘
            名字=‘王二丫‘
            性別=‘女‘
            年齡=18
        技能:
            學習
            吃飯
            睡覺

    對象2:李三炮
        特征:
            學校=‘luffycity‘
            名字=‘李三炮‘
            性別=‘男‘
            年齡=38
        技能:
            學習
            吃飯
            睡覺

    對象3:張鐵蛋
        特征:
            學校=‘luffycity‘
            名字=‘張鐵蛋‘
            性別=‘男‘
            年齡=48
        技能:
            學習
            吃飯
            睡覺

    總結現實中路飛學院的學生類:
        相似的特征
            學校=‘luffycity‘

        相似的技能
            學習
            吃飯
            睡覺
‘‘‘


#定義類
class LuffyStudent():
    school = ‘luffycity‘ #類的數據屬性

    def learn(self):#類的函數屬性
        pass
    def eat(self):
        pass
    def sleep(self):
        pass
#產生對象
stu1 = LuffyStudent()
stu2 = LuffyStudent()
stu3 = LuffyStudent()

#查看類的名稱空間
# print(LuffyStudent.__dict__)
#查
print(LuffyStudent.school)

#增
# LuffyStudent.county = ‘China‘
# print(LuffyStudent.county)

#刪
# del LuffyStudent.county
# print(LuffyStudent.county)

#改
LuffyStudent.school = ‘Luffycity‘
print(LuffyStudent.school)</pre>

__init__方法

__init__方法主要用來為對象定制對象獨有的特性

#定義類
class LuffyStudent():
    school = ‘luffycity‘
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def learn(self):
        print(‘is learn‘)
    def eat(self):
        print(‘is eat‘)
    def sleep(self):
        print(‘is sleep‘)
#產生對象
stu1 = LuffyStudent(‘王二丫‘,29,‘女‘)
#先調用類產生空對象stu1,然後調用LuffyStudent.__init__(stu1,‘王二丫‘,29,‘女‘)
stu2 = LuffyStudent(‘張三‘,18,‘男‘)
stu3 = LuffyStudent(‘李四‘,28,‘女‘)

#查
# print(stu1.age)
# #刪
# del stu1.age
# print(stu1.age)

#增
stu1.class_name = ‘Python開發‘
print(stu1.class_name)
print(stu1.__dict__)

#改
stu1.age = 19
print(stu1.age)

 屬性查找

類有兩種屬性:
* 類的數據屬性,屬於對象共用的

print(id(stu1.school))
print(id(stu2.school))
print(id(stu3.school))
#輸出
2336910776112
2336910776112
2336910776112

* 類的函數屬性是綁定給對象使用的,稱為綁定對象的方法

print(LuffyStudent.sleep)
print(stu1.sleep)
print(stu3.sleep)
print(stu2.sleep)
#輸出
<function LuffyStudent.sleep at 0x000001EAB2BAAD90>
<bound method LuffyStudent.sleep of <__main__.LuffyStudent object at 0x000001EAB2BCC780>>
<bound method LuffyStudent.sleep of <__main__.LuffyStudent object at 0x000001EAB2BCC828>>
<bound method LuffyStudent.sleep of <__main__.LuffyStudent object at 0x000001EAB2BCC7F0>>

查找順序

在obj.name會先從obj自己的名稱空間裏找name,找不到則去類中找,類也找不到就去父類裏找,父類找不到就報錯了

綁定方法

  • 類中定義的函數(沒有被任何裝飾器裝飾的),其實主要是給對象使用的,而且是綁定到對象的,雖然所有對象指向的都是相同的功能,但是綁定到不同的對象就是不同的綁定方法
  • 綁定到對象的方法的特殊之處在於,綁定給誰就由誰來調用,誰來調用,就會將‘誰’本身當做第一個參數傳給方法,即自動傳值(方法__init__也是一樣的道理)

在Python中一切皆對象,且python3中類與類型是一個概念,類型就是類

練習

練習1:編寫一個學生類,產生一堆學生對象, (5分鐘)

要求:

  1. 有一個計數器(屬性),統計總共實例了多少個對象
class Student:
    school = ‘luffycity‘
    cont = 0
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
        Student.cont += 1
    def learn(self):
        pass

stu1 = Student(‘張三‘,18,‘男‘)
stu2 = Student(‘李四‘,18,‘男‘)
stu3 = Student(‘王五‘,18,‘男‘)
print(Student.cont)

練習2:模仿王者榮耀定義兩個英雄類, (10分鐘)

要求:

  1. 英雄需要有昵稱、攻擊力、生命值等屬性;
  2. 實例化出兩個英雄對象;
  3. 英雄之間可以互毆,被毆打的一方掉血,血量小於0則判定為死亡。
class zhugeliang:
    camp = ‘red‘
    def __init__(self,nickname,life_value,aggresivity):
        self.nickname = nickname
        self.life_value = life_value
        self.aggresivity = aggresivity

    def attack(self,enemy):
        enemy.life_value -= enemy.aggresivity
        if enemy.life_value <= 0:
            print(‘%s已死亡!‘%enemy.nickname)

class xiaoqiao:
    camp = ‘blue‘
    def __init__(self,nickname,life_value,aggresivity):
        self.nickname = nickname
        self.life_value = life_value
        self.aggresivity = aggresivity

    def attack(self,enemy):
        enemy.life_value -= enemy.aggresivity
        if enemy.life_value <= 0:
            print(‘%s已死亡!‘ % enemy.nickname)
r1 = zhugeliang(‘諸葛亮‘,200,100)
g1 = xiaoqiao(‘小喬‘,300,90)
g1.attack(r1)
g1.attack(r1)

面象對象語法