一、類的定義和對象的實例化
Python是一種面向對象的編程語言,類是其中重要的基礎概念。定義一個類,需要使用關鍵字class,代碼如下:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def hello(self):
print("Hello, my name is " + self.name)
上面的代碼定義了一個Person類,它有兩個屬性name和age,以及一個方法hello。在方法中使用了self關鍵字,表示這個方法是對象的方法,可以訪問對象的屬性。
下面是創建對象的代碼,使用類名後跟一對括弧即可:
p1 = Person("Alice", 25)
p2 = Person("Bob", 30)
我們使用類創建了兩個對象p1和p2,分別賦予了初始的name和age屬性。
二、繼承
繼承是面向對象編程中常用的概念之一,它允許一個類(稱為子類)從另一個類(稱為父類)中繼承屬性和方法。子類可以增加新的屬性和方法,或者重載父類的方法。下面是一個繼承的示例代碼:
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age)
self.grade = grade
def study(self):
print(self.name + " is studying")
上面代碼中,我們用Student類繼承了Person類,增加了一個grade屬性和一個study方法。
可以看到,子類的__init__方法中調用了父類的__init__方法,使用了super()函數。這是因為子類中的__init__方法會覆蓋父類的__init__方法,如果要繼承父類的屬性,就需要調用父類的__init__方法。
三、多態
多態是指同一個方法或者屬性在不同的類中有不同的實現。Python中的多態主要是通過duck typing實現,不關心對象的具體類型,只關注對象是否有某個特定的屬性或方法。下面是一個多態的示例代碼:
class Dog:
def __init__(self):
self.sound = "bark"
def speak(self):
print(self.sound)
class Cat:
def __init__(self):
self.sound = "meow"
def speak(self):
print(self.sound)
def speak(animal):
animal.speak()
speak(Dog())
speak(Cat())
上面的代碼定義了Dog和Cat兩個類,它們分別實現了speak方法。另外還定義了一個speak函數,它可以接受任何有speak方法的對象,實現了多態。
四、封裝
封裝是面向對象編程中一個重要的概念,它指的是隱藏對象的屬性和方法,只暴露必要的介面給外部使用。Python中通過命名約定實現封裝,把屬性和方法的名稱以單下劃線或者雙下劃線開頭,即可實現封裝。
class Car:
def __init__(self, make, model, year):
self._make = make
self.model = model
self.year = year
def _start(self):
print("start the engine")
def drive(self):
self._start()
print("drive the car")
mycar = Car("Toyota", "Camry", 2022)
mycar._start() # 仍然可以調用_start方法,但是不應該這樣做,因為它是受保護的
上面的代碼定義了一個Car類,它有三個屬性make、model和year,以及一個_drive方法和一個_start方法。其中_start方法前面加了一個單下劃線,表示這個方法是受保護的,外部應該盡量避免使用。但是這並不是嚴格的限制,還是可以通過對象調用這個方法。另外,屬性make前面也加了一個單下劃線,這也表示這個屬性是受保護的。屬性前面加雙下劃線的話,表示這個屬性是私有的,外部無法訪問。
五、類方法和靜態方法
類方法和靜態方法是Python中面向對象編程的擴展功能。類方法是指與類本身有關的方法,靜態方法是指和類無關的方法。類方法和靜態方法都是通過裝飾器實現的。下面是一個類方法和一個靜態方法的示例代碼:
class MyClass:
count = 0
def __init__(self):
MyClass.count += 1
@classmethod
def get_count(cls):
return cls.count
@staticmethod
def say_hello():
print("Hello, world!")
obj1 = MyClass()
obj2 = MyClass()
print(MyClass.get_count())
MyClass.say_hello()
上面的代碼定義了一個MyClass類,它有一個屬性count和一個__init__方法。另外還定義了一個類方法get_count和一個靜態方法say_hello。其中類方法使用了@classmethod裝飾器,它可以訪問類本身的屬性。靜態方法使用了@staticmethod裝飾器,它和類的關係非常鬆散,可以被類和對象直接調用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/259531.html