python-面向物件(一)
阿新 • • 發佈:2021-12-02
目錄
5.
1. 面向物件由來
1.面向過程程式設計:定義變數,定義函式
優點:複雜的問題流程化,進而簡單化
缺點:牽一髮而動全身,擴充套件性差,可維護性差
應用場景:對擴充套件性要求不高的地方
2.面向物件程式設計:定義一個類,類有屬性(變數、特徵),有方法(函式,技能)
優點:擴充套件性強,可維護性強
缺點:程式設計複雜度高
應用場景:對擴充套件性要求較高的地方
2. 面向物件程式設計
1 面向過程變成的核心是過程二字,過程指的是解決問題的步驟,即先幹什麼再幹什麼然後幹什麼 2 面向物件程式設計的核心是物件二字,物件是特徵與技能的結合體,盛放資料和函式的容器
3. 類和物件
# 必須先定義類,然後呼叫類產生物件 # 定義了類 Person class Person(): # 類名首字母一般情況大寫,使用大駝峰法命名 # 定義屬性 weight = 90 height = 180 # 定義技能(函式) def sleep1(self): print('睡覺') ''' 定義類: 1. 立即執行類體程式碼 2. 產生一個類的名稱空間,把類體裡面執行的名字都扔到名稱空間中(大字典) 3. 把類的名稱空間繫結給__dict__, 類名.__dict__ ''' # 檢視類的名稱空間 print(Person.__dict__) # 呼叫類產生物件,預設產生的就是一個空物件{} zhangsan = Person() # 類的例項化,得到物件 # 使用物件 zhangsan.sleep1() # 睡覺 print(zhangsan.height) # 180
4. 定製物件獨有特徵
class Person():
weight = 90
height = 180
def sleep1(self):
print('睡覺')
zhangsan = Person()
zhangsan.city = 'BJ' # 給shangsan物件定製獨有的特徵
print(zhangsan.city) # BJ
5. __init__
方法
# 物件在例項化的時候,賦初值(給物件一些屬性) # 老方法 class Student(): def choose_course(self): print('選課') s1 = Student() s1.name = 'json' s1.age = 18 print(s1.name) # json # __init__的使用 class Student(): def __init__(self, name, age): self.name = name self.age = age def choose_course(self): print('選課') s1 = Student('tom', 18) # 這種初始化方式會觸發類的__init__的執行,並把引數傳入 print(s1.name)
6. 屬性的查詢順序
# 屬性的查詢:先從自己的物件中查詢,然後在去產生物件的類中取找
class Student():
school = 'Harvard University'
def __init__(self, name, age, gender, course=None):
if course is None:
course = []
self.name = name
self.age = age
self.gender = gender
self.course = course
def choose_course(self, course):
self.course.append(course)
print('%s 選課成功 %s ' % (self.name, self.course))
s1 = Student('bob', 18, 'male')
print(s1.__dict__) # {'name': 'bob', 'age': 18, 'gender': 'male', 'course': []}
s1.choose_course('python') # bob 選課成功 ['python']
print(s1.__dict__) # {'name': 'bob', 'age': 18, 'gender': 'male', 'course': ['python']}
'''
屬性的查詢:
1. 類屬性: 在類中寫的屬性就稱為類屬性
2. 物件屬性:在物件自己的名稱空間中的屬性就是物件屬性
'''
# 1.類屬性的查詢
# 查
print(Student.school)
# 增
Student.country = 'USA' # 後面例項化的新物件才會有
print(Student.country)
# 刪
del Student.school
print(Student.__dict__) # 刪除了school屬性
# 改
Student.school = 'Oxford'
print(Student.school) # Oxford
# 2.物件的屬性查詢
# 查
print(s1.name) # bob
# 增
s1.height = 180
print(s1.__dict__) # 多了height
# 刪
del s1.age
print(s1.__dict__) # age 沒有了
# 改
s1.name = 'tony'
print(s1.name) # tony
# 判斷物件是否是某個類例項化的
class Teacher():
pass
print(isinstance(s1, Student)) # True
print(isinstance(s1, Teacher)) # False