1. 程式人生 > 其它 >第十一章 初識面向過程面向物件

第十一章 初識面向過程面向物件

目錄

面向過程的概念

面向過程核心是過程二字,解決問題的流程, 即先幹什麼,在幹什麼,最後幹什麼

# 舉例:
	1. 洗衣服
    2. 把大象放冰箱中需要幾步?
    	'''
    		1. 把冰箱門開啟
    		2. 把大象放進去
    		3. 關上冰箱門
    	'''
     3. 流水線生產飲料

    優點:複雜的問題流程化,進而簡單化
    缺點:牽一髮而動全身,擴充套件性差,可維護性差
    應用場景:對擴充套件性要求不高的地方, eg:安裝包的使用
    
    # 註冊的功能
    	'''
    		1. 使用者輸入使用者名稱和密碼
    		2. 驗證引數
    		3. 寫入檔案,註冊成功
    	'''

面向物件

面向物件核心是物件二字
	什麼是物件?
    	1. 程式中:
        	函式:盛放資料的容器
            物件:盛放資料和函式的容器
        2. 現實生活中:
        	一切皆物件
            物件:特徵與節能的結合體
       eg:
   
	優點:擴充套件性強,可維護性強
    缺點:程式設計複雜度高
    應用場景:對擴充套件性要求較高的地方。 eg:微信,qq
        
    # 舉例:
    	以學生選課系統為例
    
# 版本3:

def choose_course(stu_dict, course):
    stu_dict['course'].append(course)
    print('%s選課成功 %s' % (stu_dict['name'], stu_dict['course']))


stu1 = {
    'name': 'jason',
    'age': 18,
    'gender': 'male',
    'course': [],
    'choose_course': choose_course
}

stu2 = {
    'name': 'ly',
    'age': 18,
    'gender': 'male',
    'course': [],
    'choose_course': choose_course
}

stu1['choose_course'](stu1, 'python')
stu2['choose_course'](stu2, 'python')

類的定義和物件的產生

物件: 特徵與技能的結合體
類:一系列物件相似的特徵與相似的技能的結合體

強調:站在不同的分類,劃分的分類不一定一樣

# 問題來了:
	到底是先有類還是先有物件?
    1. 程式中:
    	必須先定義類,然後呼叫類產生物件
    2. 現實生活中:
    	先有物件,在有人類
  
'''
使用專業的語法定義類:
    1. 定義函式
        def 函式名():
            pass

    2. 定義類:
        class 類名():
            pass

'''

# 定義類:
'''
    發生了什麼事?
        1. 立即執行類體程式碼
        2. 產生一個類的名稱空間,把類體裡面執行的名字都扔到名稱空間中(大字典)
        3. 把類的名稱空間繫結給__dict__, 類名.__dict__
'''
# 類名一般情況首字母大寫
class Student():
    # 定義一個屬性
    school = 'SH'

    # 定義一個技能(函式)
    def choose_course(stu_dict, course):
        stu_dict['course'].append(course)
        print('%s選課成功 %s' % (stu_dict['name'], stu_dict['course']))

    print('>>>>>>')

# 檢視類的名稱空間
print(Student.__dict__)


# 產生物件
# 呼叫類產生物件,預設產生的就是一個空物件{}

stu1 = Student()
stu2 = Student()
stu3 = Student()

print(stu1.__dict__)
print(stu2.__dict__)
print(stu3.__dict__)

給物件定製自己獨有的屬性

# 版本3:
class Student():
    # 定義一個屬性
    school = 'SH'

    # 初始化方法
    # 呼叫類自動觸發的函式
    # 該方法不是一定要定義,需要用到就定義,不需要刻意不定義
    def __init__(stu_obj, name, age, gender):
        # 空物件.name = name
        # 空物件.age = age
        # 空物件.gender = gender
        stu_obj.name = name  # stu1.__dict__['name'] = 'jason'
        stu_obj.age = age  # stu1.__dict__['age'] = 18
        stu_obj.gender = gender  # stu1.__dict__['gender'] = 'male'、
        # return None # 在這個方法中不能有返回值,
    # 定義一個技能(函式)
    def choose_course(stu_dict, course):
        stu_dict['course'].append(course)
        print('%s選課成功 %s' % (stu_dict['name'], stu_dict['course']))


# 呼叫類發生了幾件事?
'''
    1. 得到一個空物件
    2. 呼叫了Student.__dict__(空物件,'ly', 18, 'male'),
    3. 得到一個初始化的結果。
'''
stu1 = Student('ly', 18, 'male')
stu2 = Student('jason', 18, 'male')
# stu1 = Student()
# print(stu1.__dict__)
# print(stu2.__dict__)

# print(stu1.name)
# print(stu2.name)

# 屬性的查詢:先從自己的物件中查詢,然後在去產生物件的類中取找

stu1.school = 'aaaa'
print(stu1.school)

屬性的查詢順序

 # 版本3:
class Student():
    # 定義一個屬性
    school = 'SH'

    def __init__(self, name, age, gender, course=None):
        if course is None:
            course = []
        self.name = name  # stu1.__dict__['name'] = 'jason'
        self.age = age  # stu1.__dict__['age'] = 18
        self.gender = gender  # stu1.__dict__['gender'] = 'male'
        self.course = course
    def choose_course(self, course):
        # stu_dict => stu
        self.course.append(course)
        print('%s選課成功 %s' % (self.name, self.course))

    def func(self, name, age):
        pass

# 屬性的查詢:
# 1. 類屬性: 在類中寫的屬性就稱為類屬性
# 2. 物件屬性:在物件自己的名稱空間中的屬性就是物件屬性

# 類屬性的查詢
# 1. 查
# print(Student.school)

# 2. 增加
# Student.country = 'China'


# 3. 改
# Student.school = 'BJ'

# 4. 刪除
# del Student.school
# print(Student.__dict__)
# {}
stu = Student('ly', 18, 'male')  # 例項化物件, stu就是一個例項
# 物件屬性
# 1. 查
# print(stu.name)
# print(stu.age)
# print(stu.gender)

# 2. 增
# stu.aaa = 'aaa'
#
# # 3. 改
# stu.name = 'bbb'

# 4. 刪除
# del stu.name
# print(stu.__dict__)


# 類中的方法,類可以呼叫,物件也可以呼叫
# 類呼叫方法
# Student.choose_course(stu, 'python') # 類來呼叫,函式的引數有幾個就要傳幾個
# print(Student.choose_course)

# 物件呼叫方法
# 類中的方法,類可以呼叫,物件也可以呼叫, 但是,推薦物件來呼叫,因為物件來呼叫,會把自己當成第一個引數傳遞給函式
stu.choose_course('python') # stu.choose_course(stu, 'python')

class Teacher():
    pass
print(isinstance(123, int))
print(isinstance(stu, Teacher))