Python Class 中的方法
1.实例方法
实例方式是和类的某个实例绑定,所以它可以访问实例中的属性,该方法的特征是:第一个参数是self,通过self访问属性,这是最常见的一种方法类型
下面中的greet方法就属于实例方法
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
if __name__ == "__main__":
person = Person("Alice", 30)
person.greet()2
2.类方法
需要在方法签名上使用@classmethod修饰,方法的特征是特征是:第一个参数是cls,通过这个参数可以获取类的信息,可以打印类的信息,也可以调用这个类的构造方法,不能直接访问实例中的属性。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
@classmethod
def from_string(cls, person_str):
# 打印类的信息
print(cls.__name__)
name, age = person_str.split(",")
return cls(name.strip(), int(age.strip()))
if __name__ == "__main__":
# 通过调用from_string方法,创建一个 Person 实例
Person.from_string("Bob, 25").greet()
3.静态方法
静态方法需要使用@staticmethod修饰,该方法和类没有绑定关系,
主要是用来写一个写一些通用的工具函数。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
@staticmethod
def is_adult(age):
return age >= 18
if __name__ == "__main__":
print(Person.is_adult(20)) # True
print(Person.is_adult(17)) # False
4.抽象方法
1.抽象方法存在于抽象类中,如果要定义一个抽象类需要继承ABC。
2.抽象方法存在的意义就是定义标准,具体的实现有子类实现。
3.抽象类不能直接实例化,因为包含的抽象方法不能直接被调用。
4.抽象方法需要使用@abstractmethod修饰。
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof"
class Cat(Animal):
def speak(self):
return "Meow"
# 以下代码会报错,因为无法实例化抽象类
if __name__ == "__main__":
#TypeError: Can't instantiate abstract class Animal with abstract method speak
# animal = Animal() #
dog = Dog()
print(dog.speak()) # 输出: Woof
cat = Cat()
print(cat.speak()) # 输出: Meow