日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

高淇python讲义百度文库_python 面向对象01

發布時間:2024/1/23 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高淇python讲义百度文库_python 面向对象01 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原創是:高淇老師講義

Python 中 一切皆對象

=====================================================================================================================================

class Student:

school = "清華大學" # 類屬性

count = 0 # 類屬性

def __init__(self, name, score):# 構造方法(語言自帶)

self.name = name # 實例屬性

self.score = score

Student.count = Student.count+1

def say_score(self): # 實例方法(自定義)

print("學校是:", Student.school)

print(self.name, '的分數是:', self.score)

s1 = Student('張三', 80) # s1 是實例對象,自動調用__init__()方法

s1.say_score() # 實例對象調用實例方法

Student.say_score(s1)

print('一共創建{0}個 Student 對象'.format(Student.count))

=====================================================================================================================================

類-->類對象

類的實例-->實例對象

定義類

1、類名稱 首字母大寫,包含字母、數字、下劃線,多個單詞:駝峰命名

2、類成員 屬性+方法

2.1、類屬性

2.2、類方法

2.3、實例屬性

2.4、實例方法

2.6、靜態方法

2.7、語法定義的方法

實例對象,自動調用__init__(self[,])方法。

Python 對象包含三個部分:

1、id(identity 識別碼)

2、type(對象類型)

3、value(對象的值)

屬性(attribute)

方法(method)

=====================================================================================================================================

構造方法:

1、__init__(self[,])

2、構造方法作用:用來初始化實例對象的實例屬性

3、構造函數調用 類名(參數)

4、__init__(self[,])方法 自己定義系統就不自動定義了,如果自己不定義,系統將自動定義一個不帶參數的。

__new__()方法: 用于創建對象,無需重定義該方法,系統自動完成。

實例屬性:實例對象的屬性

1、實例屬性一般在__init__()方法中

2、本類中訪問:self.實例屬性名

3、創建實例對象后訪問:實例對象.實例屬性名

4、實例對象可以自行添加實例屬性(事先在類中并未定義改實例屬性)

=====================================================================================================================================

實例方法:

1、def 方法名(self [, 形參列表]):

函數體

2、對象.方法名([實參列表])

3、特別需注意:實例方法第一個不管是否有自定義參數,參數列表第一個參數必須是self。實例對象調用實例方法時忽略self。

函數 vs 實例方法

1、特定功能的代碼塊

2、函數要用直接調用,實例方法則需要通過實例對象才能調用(類外部)

3、self

1、dir(obj)可以獲得對象的所有屬性、方法

2、obj.__dict__ 對象的屬性字典

3、pass 空語句

4、isinstance(對象,類型)判斷"對象"是不是"指定類型"

=====================================================================================================================================

類對象、類屬性、類方法、靜態方法

類屬性:

類屬性屬于類對象,可以被所有實例對象共享。

=====================================================================================================================================

類方法:

類方法"類對象"的方法。

類方法通過裝飾器@classmethod 來定義。

@classmethod

def 類方法名(cls[,形參列表]):

函數體

1、@classmethod 必須位于方法上面一行

2、cls

3、類方法調用:類名.類方法名

4、類方法訪問實例屬性和實例方法會導致錯誤。(原因:實例屬性,實例方法是實例對象調用的,如果在類方法中直接調用,可能根本沒實例對象)

5、...

pass 占位符

class Student:

school = "清華大學" # 類屬性

@classmethod

def printCompany(cls):

print(cls.school)

Student.printCompany()

=====================================================================================================================================

靜態方法:

@staticmethod

def 靜態方法名([形參列表]) :

函數體

1、@staticmethod 必須位于方法上面一行

2、調用靜態方法格式:"類名.靜態方法名(參數列表)"

3、靜態方法中訪問實例屬性和實例方法會導致錯誤

class Student:

@staticmethod

def add(a, b): # 靜態方法

print("{0}+{1}={2}".format(a, b, (a+b)))

return a+b

Student.add(20, 30)

=====================================================================================================================================

__del__方法(析構函數)和垃圾回收機制

對象沒有被引用時(引用計數為 0),由垃圾回收器調用__del__()方法。

系統會自動提供__del__方法,一般不需要自定義析構方法。

class Person:

def __del__(self):

print("銷毀對象:{0}".format(self))

p1 = Person()

p2 = Person()

del p2

print("程序結束")

=====================================================================================================================================

__call__方法和可調用對象

class SalaryAccount:

def __call__(self, salary):

yearSalary = salary*12

return dict(yearSalary=yearSalary)

s = SalaryAccount()

print(s(150000))

=====================================================================================================================================

Python 中方法沒有重載

方法簽名包含 3個部分:

1、方法名

2、參數數量

3、參數類型

定義多個同名方法,只有最后一個有效。(最后一個覆蓋了前面的)

=====================================================================================================================================

方法的動態性

class Person:

def work(self):

print("努力上班!")

def play_game(self):

print("{0}玩游戲".format(self))

def work2(s):

print("好好工作,努力上班!")

Person.play = play_game

Person.work = work2

p = Person()

p.play()

p.work()

Person.play 這個地方的play 在類中并未定義

Person.work 雖然定義了,還是可以重新賦值

通過右邊的內容,確定左邊的對象。

=====================================================================================================================================

私有屬性和私有方法(實現封裝)

1、兩個下劃線開頭的屬性是私有的。

2、類內部可以訪問私有屬性(方法)

3、類外部不能直接訪問私有屬性(方法)

4、類外部可以通過"_類名__私有屬性(方法)"訪問

class Employee:

__company = "xxx" # 私有類屬性. 通過 dir 可以查到 _Employee__company

def __init__(self, name, age):

self.name = name

self.__age = age # 私有實例屬性

def say_company(self):

print("我的公司是:", Employee.__company) # 類內部可以直接訪問私有屬性

print(self.name, "的年齡是:", self.__age)

self.__work()

def __work(self): # 私有實例方法 通過 dir 可以查到 _Employee__work

print("工作!好好工作,好好賺錢,娶個媳婦!")

p1 = Employee("110", 32)

print(p1.name)

print(dir(p1))

p1.say_company()

print(p1._Employee__age)

# 通過這種方式可以直接訪問到私有屬性。通過 dir 可以查到屬性:_Employee__age

# print(p1.__age) #直接訪問私有屬性,報錯

# p1.__sleep() #直接訪問私有方法,報錯

有屬性"__age"在實際存儲時是按照"_Person__age"這個屬性來存儲的。

=====================================================================================================================================

@property 裝飾器

@property 可以將一個方法的調用方式變成"屬性調用"

class Employee:

def __init__(self, name, salary):

self.name = name

self.__salary = salary

@property # 相當于 salary 屬性的 getter 方法

def salary(self):

print("月薪為{0},年薪為{1}".format(self.__salary, (12*self.__salary)))

return self.__salary

@salary.setter

def salary(self, salary): # 相當于 salary 屬性的 setter 方法

if(0 < salary < 1000000):

self.__salary = salary

else:

print("薪水錄入錯誤!只能在 0-1000000 之間")

emp1 = Employee("高淇", 100)

print(emp1.salary)

emp1.salary = -200

=====================================================================================================================================

屬性和方法命名總結

1、_xxx:保護成員,不能用“from module import * ”導入,只有類對象和子類對象能訪問這些成員。

2、__xxx__:系統定義的特殊成員

3、__xxx: 類中的私有成員,只有類對象自己能訪問,子類對象也不能訪問。(但,在類外部可以通過“對象名. _類名__xxx”這種特殊方式訪問。Python 不存在嚴格意義的私有成員)

注:再次強調,方法和屬性都遵循上面的規則。

總結

以上是生活随笔為你收集整理的高淇python讲义百度文库_python 面向对象01的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。