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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

發(fā)布時(shí)間:2025/3/20 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

六、Python面向?qū)ο?-類(lèi)與對(duì)象\封裝\繼承\(zhòng)多態(tài)

1、什么是面向?qū)ο缶幊?/p>

1.1 程序設(shè)計(jì)的范式:程序可控,易于理解

1.2 抽象并建立對(duì)象模型

1.3 程序是不同對(duì)象相互調(diào)用的邏輯。每個(gè)對(duì)象在代碼中抽象出來(lái)其實(shí)就是類(lèi);描述類(lèi)特征的成為屬性;具體到某個(gè)類(lèi)(獨(dú)立的類(lèi))則成為實(shí)例

2、類(lèi)與對(duì)象

2.1 類(lèi):是多個(gè)類(lèi)似事物的統(tǒng)稱(chēng)。能夠幫助我們快速理解和判斷事物的性質(zhì)

2.2 數(shù)據(jù)類(lèi)型:不同的數(shù)據(jù)類(lèi)型屬于不同的類(lèi),使用內(nèi)置函數(shù)type()可以查看數(shù)據(jù)類(lèi)型

2.3 對(duì)象: (eg)100、40、999都是int類(lèi)下包含的相似的不同個(gè)例,這個(gè)個(gè)例專(zhuān)業(yè)術(shù)語(yǔ)稱(chēng)為實(shí)例或?qū)ο?#xff0c;python中一切皆對(duì)象

2.4 類(lèi)的創(chuàng)建

① 語(yǔ)法:通過(guò)class關(guān)鍵字定義一個(gè)類(lèi);類(lèi)名以大寫(xiě)字母開(kāi)頭

② 類(lèi)的組成:類(lèi)屬性、實(shí)例方法、靜態(tài)方法、類(lèi)方法

2.5 對(duì)象的創(chuàng)建

① 對(duì)象的創(chuàng)建又稱(chēng)為類(lèi)的實(shí)例化

② 語(yǔ)法:實(shí)例名 = 類(lèi)名()

③ 意義:有了實(shí)例,就可以調(diào)用類(lèi)中的內(nèi)容

2.6 類(lèi)屬性、類(lèi)方法、靜態(tài)方法

① 類(lèi)屬性:類(lèi)中方法外的變量稱(chēng)為類(lèi)屬性,被該類(lèi)的所有對(duì)象所共享

② 類(lèi)方法:[email?protected],使用類(lèi)名直接訪問(wèn)的方法

③ 靜態(tài)方法:[email?protected],使用類(lèi)名直接訪問(wèn)的方法

④ 一個(gè)例子

class Student: # Student 為類(lèi)的名稱(chēng)(類(lèi)名)由一個(gè)或多個(gè)單詞組成,每個(gè)單詞的首字母大寫(xiě),其余小寫(xiě)

native_pace = ‘吉林‘ # 直接寫(xiě)在類(lèi)里的變量,稱(chēng)為類(lèi)屬性

# 初始化方法

def __init__(self, name, age):

self.name = name # self.name 稱(chēng)為實(shí)例屬性,進(jìn)行了一個(gè)賦值操作,將局部變量的name的值賦給實(shí)例屬性

self.age = age

# 實(shí)例方法

def eat(self): # 采用類(lèi)名.方法名(類(lèi)的對(duì)象)調(diào)用時(shí),需要傳入self

print(‘學(xué)生吃東西~~~~‘)

# 靜態(tài)方法:[email?protected]

@staticmethod

def method(): # 靜態(tài)方法中不允許寫(xiě)self

print(‘這是靜態(tài)方法‘)

# 類(lèi)方法:[email?protected]

@classmethod

def cm(cls): # 類(lèi)方法中寫(xiě)cls,采用類(lèi)名.方法名(類(lèi)的對(duì)象)調(diào)用的時(shí)候不需要傳入cls

print(‘這是類(lèi)方法‘)

# 在類(lèi)之內(nèi)定義的稱(chēng)為方法,在類(lèi)之外定義的稱(chēng)為函數(shù)

def drink(): # 定義在類(lèi)之外,叫做函數(shù)

print(‘喝水‘)

print(Student) # ==>

print(type(Student)) # ==>

print(id(Student)) # ==>1669260589880

# 創(chuàng)建Student類(lèi)的對(duì)象:根據(jù)類(lèi)對(duì)象創(chuàng)建出來(lái)的對(duì)象,叫做實(shí)例對(duì)象

stu1 = Student(‘張三‘, 20)

print(stu1)

print(type(stu1))

print(id(stu1))

# 對(duì)象調(diào)用類(lèi)方法一,可以直接采用 對(duì)象名.方法名()

stu1.eat() # ==>學(xué)生吃東西~~~~

print(stu1.name) # ==>張三

print(stu1.age) # ==>20

# 對(duì)象調(diào)用類(lèi)方法二

Student.eat(stu1) # 類(lèi)名.方法名(類(lèi)的對(duì)象)-->實(shí)際上就是方法定義出的self

# 類(lèi)屬性的使用方式

print(Student.native_pace)

stu2 = Student(‘李四‘, 33)

print(stu1.native_pace)

print(stu2.native_pace)

Student.native_pace = ‘天津‘ # 修改類(lèi)屬性后,訪問(wèn)時(shí)所有值都改變

print(stu1.native_pace)

print(stu2.native_pace)

# 類(lèi)方法的使用方式

Student.cm()

# 靜態(tài)方法的使用方式

Student.method()

2.7 動(dòng)態(tài)綁定屬性和方法

① python是動(dòng)態(tài)語(yǔ)言,在創(chuàng)建對(duì)象之后,可以動(dòng)態(tài)地綁定屬性和方法

② 一個(gè)例子

class Student:

def __init__(self, name, age):

self.name = name

self.age = age

def eat(self):

print(self.name + ‘在吃飯‘)

# 一個(gè)Student類(lèi)可以創(chuàng)建多個(gè)Student的實(shí)例對(duì)象,每個(gè)實(shí)例對(duì)象可以相同也可以不同

stu1 = Student(‘張三‘, 20)

stu2 = Student(‘李四‘, 33)

# 為stu2動(dòng)態(tài)綁定性別屬性,但是stu1不存在性別屬性

stu2.gender = ‘女‘

print(stu1.name, stu1.age)

print(stu2.name, stu2.age, stu2.gender)

# 為stu1單獨(dú)綁定一個(gè)動(dòng)態(tài)函數(shù)

def show():

print(‘定義在類(lèi)之外的,稱(chēng)函數(shù)‘)

stu1.show = show # 動(dòng)態(tài)綁定方法

stu1.show()

stu2.show() # stu2沒(méi)有綁定這個(gè)方法,所以執(zhí)行報(bào)錯(cuò)

3、面向?qū)ο笕筇卣?/p>

3.1 封裝:提高程序的安全性

① 將數(shù)據(jù)(屬性)和行為(方法)包裝到類(lèi)對(duì)象中,在方法內(nèi)部對(duì)屬性進(jìn)行操作,在類(lèi)對(duì)象的外部調(diào)用方法。這樣,無(wú)需關(guān)心方法內(nèi)部的具體實(shí)現(xiàn)細(xì)節(jié),從而隔離了復(fù)雜度

② 在python中沒(méi)有專(zhuān)門(mén)的修飾符用于屬性的私有,如果該屬性不希望在類(lèi)對(duì)象外部被訪問(wèn),前面使用兩個(gè)‘_’.

③ 一個(gè)例子

class Student:

def __init__(self, name, age):

self.name = name

self.__age = age # 年齡不希望在類(lèi)的外部被使用,所以加了兩個(gè)__

def show(self):

print(self.name, self.__age)

stu = Student(‘張三‘, 20)

stu.show()

# 在類(lèi)的外部使用name和age

print(stu.name)

print(stu.__age) # 出現(xiàn)報(bào)錯(cuò),不能直接使用。AttributeError: ‘Student‘ object has no attribute ‘__age‘

print(dir(stu)) # 查看stu可以使用的全部屬性和方法

print(stu._Student__age) # 在類(lèi)的外部訪問(wèn)

3.2 繼承:提高代碼的復(fù)用性

① 語(yǔ)法

class 子類(lèi)類(lèi)名(父類(lèi)1, 父類(lèi)2, ...):

pass

② 如果一個(gè)類(lèi)沒(méi)有繼承任何類(lèi),則默認(rèn)繼承object

③ python支持多繼承

④ 定義子類(lèi)時(shí),必須在其構(gòu)造函數(shù)中調(diào)用父類(lèi)的構(gòu)造函數(shù):新類(lèi)不需要重頭編寫(xiě),子類(lèi)只需要實(shí)現(xiàn)缺少的新功能,繼承父類(lèi)所有的屬性、功能

class Person(object): # Person 繼承object類(lèi)

def __init__(self, name, age):

self.name = name

self.age = age

def info(self):

print(self.name, self.age)

class Student(Person):

def __init__(self, name, age, stu_no):

super().__init__(name, age)

self.stu_no = stu_no

class Teacher(Person):

def __init__(self, name, age, teach_year):

super().__init__(name, age)

self.teach_year = teach_year

stu = Student(‘張三‘, 20, ‘1001‘)

tea = Teacher(‘老師‘, 33, 10)

stu.info()

tea.info()

⑤ 函數(shù)isinstance()可以判斷一個(gè)變量的類(lèi)型class Person(object)

class Person(object):

def __init__(self, name, gender):

self.name = name

self.gender = gender

class Student(Person):

def __init__(self, name, gender, score):

super(Student, self).__init__(name, gender)

self.score = score

class Teacher(Person):

def __init__(self, name, gender, course):

super(Teacher, self).__init__(name, gender)

self.course = course

p = Person(‘Tim‘, ‘Male‘)

s = Student(‘Bob‘, ‘Male‘, 88)

t = Teacher(‘Alice‘, ‘Female‘, ‘English‘)

# 在繼承鏈上,一個(gè)父類(lèi)的實(shí)例不能是子類(lèi)類(lèi)型,因?yàn)樽宇?lèi)比父類(lèi)多了一些屬性和方法

print(isinstance(p, Person)) # ==>True # p是Person類(lèi)型

isinstance(p, Student) # ==>False # p不是Student類(lèi)型

isinstance(p, Teacher) # ==>False # p不是Teacher類(lèi)型

# 在一條繼承鏈上,一個(gè)實(shí)例可以看成它本身的類(lèi)型,也可以看成它父類(lèi)的類(lèi)型

isinstance(s, Person) # ==>True # s是Person類(lèi)型

isinstance(s, Student) # ==>True # s是Student類(lèi)型

isinstance(s, Teacher) # ==>False # s不是Teacher類(lèi)型

# isinstance也可以用于Python自有數(shù)據(jù)類(lèi)型的判斷

s = ‘this is a string.‘

n = 10

isinstance(s, int) # ==> False

isinstance(n, str) # ==> False

3.3 多態(tài):提高程序的可擴(kuò)展性和可維護(hù)性

① 多態(tài)就是“具有多種形態(tài)”,即使不知道一個(gè)變量所引用的對(duì)象到底時(shí)什么類(lèi)型,仍然可以通過(guò)這個(gè)變量調(diào)用方法,在運(yùn)行過(guò)程中根據(jù)變量所引用對(duì)象的類(lèi)型,動(dòng)態(tài)決定調(diào)用哪個(gè)對(duì)象中的方法

4、方法重寫(xiě)

4.1 如果子類(lèi)對(duì)繼承自父類(lèi)的某個(gè)屬性或者方法不滿意,可以在子類(lèi)中對(duì)其(方法體)進(jìn)行重新編寫(xiě)

4.2 子類(lèi)重寫(xiě)后的方法中可以通過(guò)super().xxx()調(diào)用父類(lèi)中被重寫(xiě)的方法

4.3 一個(gè)例子

class Person(object): # Person 繼承object類(lèi)

def __init__(self, name, age):

self.name = name

self.age = age

def info(self):

print(self.name, self.age)

class Student(Person):

def __init__(self, name, age, stu_no):

super().__init__(name, age)

self.stu_no = stu_no

# 重寫(xiě)父類(lèi)中的info方法

def info(self):

super().info() # 會(huì)先執(zhí)行父類(lèi)中的info方法

print(self.stu_no)

class Teacher(Person):

def __init__(self, name, age, teach_year):

super().__init__(name, age)

self.teach_year = teach_year

# 重寫(xiě)父類(lèi)中的info方法

def info(self):

super().info() # 會(huì)先執(zhí)行父類(lèi)中的info方法

print(self.teach_year)

stu = Student(‘張三‘, 20, ‘1001‘)

tea = Teacher(‘老師‘, 33, 10)

stu.info()

tea.info()

5、object類(lèi)

5.1 object類(lèi)時(shí)所有類(lèi)的父類(lèi),因此所有類(lèi)都有object的屬性和方法

5.2 內(nèi)置函數(shù)dir()可以查看那指定對(duì)象的所有屬性

5.3 object類(lèi)有一個(gè)__str__()方法,用于返回一個(gè)對(duì)于“對(duì)象的描述”,對(duì)應(yīng)于內(nèi)置函數(shù)str()經(jīng)常用于print()方法,幫助我們查看對(duì)象的信息,所以我們經(jīng)常會(huì)對(duì)__str__()重寫(xiě)

class Student():

def __init__(self, name, age, stu_no):

self.name = name

self.age = age

self.stu_no = stu_no

def __str__(self):

return ‘我的名字是{}. 年齡是{}‘.format(self.name, self.age)

stu = Student(‘張三‘, 20, ‘1001‘)

print(stu) # 默認(rèn)會(huì)調(diào)用__str__()方法

print(type(stu))

原文:https://www.cnblogs.com/xuanling/p/14422786.html

總結(jié)

以上是生活随笔為你收集整理的python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。