面向對象是什么:
????????面向對象編程(Object-Oriented Programming,OOP)是一種編程范式,它以對象為基礎,將數據和操作封裝在一起以創建可重用的代碼模塊。在面向對象編程中,對象是程序的基本單元,它們可以代表現實世界中的實體或概念,如人、車、動物等。面向對象編程的主要思想是將現實世界中的事物抽象為對象,并通過對象之間的交互來實現程序的功能。
面向對象編程的核心概念包括:
-
類與對象:類是對象的抽象,描述了具有相似屬性和行為的一組對象的共同特征。對象是類的實例,它具體化了類的定義,并擁有類所描述的屬性和行為。? ? ?
-
封裝:封裝是將數據和操作封裝在對象內部的機制,隱藏了對象的內部細節,只對外部提供有限的接口。這樣可以保護數據不受非法訪問和意外修改,提高了代碼的可維護性和可重用性。
-
繼承:繼承是一種機制,允許一個類(稱為子類或派生類)繼承另一個類(稱為父類或基類)的屬性和行為,并可以在此基礎上進行擴展或修改。通過繼承,可以實現代碼的重用和層次化的組織結構。
-
多態:多態是指同一個操作作用于不同的對象上時可以產生不同的行為。在面向對象編程中,多態通過方法的重寫(覆蓋)和方法的重載來實現。多態提高了代碼的靈活性和可擴展性,使得程序更加易于理解和維護。
Python面向對象:
定義類:
? ? ? ? 類有屬性和方法,對應實體的屬性和行為,類定義的語法格式:
class ClassName:<element_1>..<element_N><action_1>..<action_N>
例如:?
class Person:age = 18name = "Jack"def speak(self):return f'hello I am {self.name}'
Human = Person()
print(Human.speak())
#輸出:hello I am Jack
?構造方法
????????類有一個名為 __init__() 的特殊方法,也叫構造方法,類實例化對象時會自動調用這個方法,self指實例化的對象。
例如:
class Person:def __init__(self, name, age):self.age = ageself.name = namedef speak(self):return f"hello I am {self.name}, I'm {self.age} years old"
Human = Person('jack',18)
#輸出:hello I am jack, I'm 18 years old
繼承
????????子類可以繼承父類的屬性和方法,并且在子類中還可以改寫父類的屬性和方法,子類也可以定義新的方法。
例如:
class Person:def __init__(self, n, a):self.age = aself.name = ndef run(self):return f"{self.name} is running"def speak(self):return f"hello I am {self.name}, I'm {self.age} years old"
class Student(Person):def __init__(self, stuId,n,a):Person.__init__(self,n,a)self.stuId = stuIddef speak(self):return f"hello I am {self.name}, I'm {self.age} years old, my student id is {self.stuId}"
Human = Person('jack',18)
xiaohong = Student("20180001","小紅",18)print(xiaohong.speak())
print(xiaohong.run())
#輸出如下
#hello I am 小紅, I'm 18 years old, my student id is 小紅
#小紅 is running
私有屬性與方法
????????在類的屬性或方法前加上__表示此屬性或方法為私有屬性與方法,子類無法繼承和調用。
例如:
class Person:def __init__(self, n, a, money):self.age = aself.name = nself.__money = moneydef run(self):return f"{self.name} is running"def speak(self):return f"hello I am {self.name}, I'm {self.age} years old"def __spendMoney(self):return f"{self.name} 花了{self.__money}元"
class Student(Person):def __init__(self, stuId, n, a):Person.__init__(self, n, a, 100)self.stuId = stuIddef speak(self):return f"hello I am {self.name}, I'm {self.age} years old, my student id is {self.stuId}"xiaohong = Student("20180001","小紅",18)
xiaohong.__spendMoney()#此句報錯,無法調用
運算符重載:
?????????Python也可以進行運算符重載,直接調用類的專有方法就可以實現運算符重載。
例如:
class Purse:def __init__(self, a, b):self.money = aself.E_money = bdef __str__(self):return f"{self.money},{self.E_money}"def __add__(self, other):return Purse(self.money+other.money,self.E_money + other.E_money)
Purse1 = Purse(10,20)
Purse2 = Purse(30,40)
print(Purse1 + Purse2)
#輸出:40,60