Python 面向對象

一、面向過程編程(針對擴展性要求不高的程序,可使用面向過程編程)

    面向過程編程(重點在於過程):在使用面向過程編程時首相想到的是解決問題的步驟,即先幹什麼、再幹什麼、最後幹什麼。

    優點:把複雜的問題流程化、進而簡化

    缺點:可擴展性差


二、面向對象編程(用在擴展性強的程序上(與用戶交互上))

    核心是對象二字,面向對象是特徵(指變量)與技能(指函數)的結合體

    優點:擴展性強

    缺點:編程的複雜度高


三、定義類

    類:是一系列對象相似的特徵與技能的結合體(站在不同的角度總結出的類是截然不同的)

    在程序中:一定要先定義類,後調用類產生對象

例子:

對象1:學生
    特徵
 
        school='Oldboy'
        name='李泰迪'
        sex='male'
        age=18
    技能 
        選課


對象2:學生
    特徵

        school='Oldboy'
        name='張隨便'
        sex='male'
        age=38
    技能
        選課


對象3:老師
    特徵 

        name='Egon'
        sex='male'
        age=18
        level=10
    技能 
        打分
        點名

總結:

    學生之間相似的特徵:school='Oldboy'

    學生之間相似的技能:選課


    3.1、類的使用及用法

'''在程序中:先定義類(定義類主要是爲了用)'''
'''類在定義階段就會執行代碼,會產生類的名稱空間'''
class OldboyStudent:    #類並不是一個真正存在的東西,它是一個抽象的概念(這裏表示school='Oldboy')
    #相似的特徵:
    school='Oldboy'

    def choose_course(self):
        print('is choose_course')

print(OldboyStudent.__dict__)        #打印類定義的名稱空間
print(OldboyStudent.__dict__['school'])        #去名稱空間內的"school"對應的值
# >>Oldboy
print(OldboyStudent.school)          #本質就是取"OldboyStudent.__dict__['school']"的值(OldboyStudent名稱空間內"school"的值)
# >>Oldboy

OldboyStudent.choose_course(123)     #調用類的容器"choose_course",由於choose_course本身是一個函數,那麼就按照函數的寫法來調用
# >>is choose_course

'''類的用法:增刪改查'''
OldboyStudent.country='China'       #增加一條數據
OldboyStudent.school='Oldgirl'      #修改數據,把'Oldboy'修改爲'Oldgirl'
print(OldboyStudent.__dict__)
del OldboyStudent.school            #在類(一個容器)裏面把school給刪掉
print(OldboyStudent.__dict__)
總結類的用途:2種
    1、調用類產生對象
    2、類本身就是一個容器,裏面有很多名稱空間定義好的名稱,可以直接取


    3.2、對象的使用及用法

'''後調用類,產生對象。調用類的過程又稱爲實例化'''
#一、先定義類
class OldboyStudent:
    school='Oldboy'

    def choose_course(self):
        print('is choose_course')

#二、後調用類
stu1=OldboyStudent()   #stu1是一個對象,也可以說是一個實例
stu2=OldboyStudent()   #stu2是一個對象,也可以說是一個實例

def init(obj,x,y,z):   #定義一個函數,obj這裏要傳對象,x,y,z分別傳學生的name,sex,age
    obj.name=x
    obj.sex=y
    obj.age=z

init(stu1,'李泰迪','male',18)     #調用函數init實際上就是給對象賦值的一個過程,即:
    # stu1.name='李泰迪'
    # stu1.sex='male'
    # stu1.age=18

init(stu2,'張隨便','famale',38)
    # stu1.name='張隨便'
    # stu1.sex='famale'
    # stu1.age=38

print(stu1.__dict__)        #打印對象stu1的名稱空間,可得出名稱空間的值有哪些
    >>{'name': '李泰迪', 'sex': 'male', 'age': 18}
print(stu2.__dict__)        #打印對象stu2的名稱空間,可得出名稱空間的值有哪些
    >>{'name': '張隨便', 'sex': 'famale', 'age': 38}


    3.3、對象的使用及用法(升級版)

'''後調用類,產生對象。調用類的過程又稱爲實例化'''
#一、先定義類
class OldboyStudent:
    school='Oldboy'

    def __init__(self, x, y, z):    #定義對象的特徵(name,age,sex)
        self.name = x
        self.sex = y
        self.age = z

    def choose_course(self):
        print('is choose_course')

#會在調用類時,或者叫實例化時自動觸發__init__(stu1,)
#二、後調用類
stu1=OldboyStudent('李泰迪','male',18)
stu2=OldboyStudent('張隨便','famale',38)

print(stu1.__dict__)
>>{'name': '李泰迪', 'sex': 'male', 'age': 18}
print(stu2.__dict__)
>>{'name': '張隨便', 'sex': 'famale', 'age': 38}
總結對象的用途:
    1、對象的屬性查找是先從對象本身的名稱空間找,找不到則取類的名稱空間中查找,2者都找不到則報錯

3.2.1、修改對象名稱空間的值與修改類名稱空間的值

#一、先定義類
class OldboyStudent:
    school='Oldboy'

    def __init__(self, x, y, z):
        self.name = x
        self.sex = y
        self.age = z

    def choose_course(self):
        print('is choose_course')

#二、後調用類
stu1=OldboyStudent('李泰迪','male',18)
stu2=OldboyStudent('張隨便','famale',38)

# 修改對象下的名稱空間的值只針對對象本身的名稱空間生效
stu1.school='Sudada'
print(stu1.school)
>>Sudada
print(stu2.school)
>>Oldboy

# 修改類下的名稱空間的值,那麼引用該類的對象的名稱空間的值也會被修改
OldboyStudent.school='Sudada'
print(stu1.school)
>>Sudada
print(stu2.school)
>>Sudada

3.2.2、類對象綁定方法的使用

class OldboyStudent:
    school='Oldboy'

    def __init__(self, x, y, z):
        self.name = x
        self.sex = y
        self.age = z

    def choose_course(self):
        print('%s is choose_course' %self.name)

stu1=OldboyStudent('李泰迪','male',18)
stu2=OldboyStudent('張隨便','famale',38)

# 綁定方法的特殊點:
# 1、綁定給誰就由誰來調用
# 2、誰來調用,就會將誰當做第一個參數自動傳入
print(stu1.choose_course)
# >><bound method OldboyStudent.choose_course of <__main__.OldboyStudent object at 0x0000023031B562B0>>

stu1.choose_course()     #對象的調用實際上是在調用OldboyStudent.choose_course(stu1)
# >>:李泰迪 is choose_course

OldboyStudent.choose_course(stu1)
# >>:李泰迪 is choose_course

    綁定方法的特殊點:

        1、綁定給誰就由誰來調用

        2、誰來調用,就會將誰當做第一個參數自動傳入









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章