在python·中,一切皆为对象,对象可以通过类来创建,类是对象的抽象,它定义了对象的属性和行为。
1、类与实例
类是对现实世界描述的一种类型,它是抽象的,约定了未来实例该有的内容,是实例的模版_init__
是类的构造方法,当创建类的对象时,会自动调用这个方法。self
表示对象本身,其他参数就是对象的属性。方法是类的成员函数,接受的第一个参数是self
,表示对象本身。在类内使用方法时,不需要传递这个参数。外部访问方法时,需要在对象后面加上方法名,如:对象.方法名()
实例是调用类则生成实例,他是具体的,有具体数据,实例的内容依赖于类
class Dog:
# 类属性
species = '犬科'
# 构造方法
def __init__(self, name, age):
self.name = name
self.age = age
# 方法
def bark(self):
print("汪汪汪")
# 创建对象
dog1 = Dog('大黄', 2)
dog2 = Dog('二黄', 1)
# 访问属性
print(dog1.name)
print(dog2.age)
# 调用方法
dog1.bark()
2、初始化方法和实例属性
属性是类中定义的变量,用于存储对象的状态或数据
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
#name和age就是类Person的属性
方法是类中定义的函数,它用于定义对象的行为
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f"Hello, my name is {self.name} and I am {self.age} years old."
#greet()就是Person类的方法
3、封装、继承、多态
封装是将数据(属性)和行为(方法)包装到一个单元中,通过公共接口进行访问,在python中通过访问控制和方法定义来实现封装。
继承是允许以个类(父类)派生出另一个类(子类)的属性和方法,子类可以扩展或修改父类的行为。在python中使用类名后跟括号中父类的名称来实现继承。
class Student(Person):
def __init__(self, name, age, student_id):
super().__init__(name, age)
self.student_id = student_id
def study(self):
return f"{self.name} is studying."
#Student类继承了Person类,并且添加了一个额外的student_id属性和study()方法
多态是允许同一个方法名在不同的类中有不同的实现,提高了代码的灵活性和可重用性。
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
# 使用多态
dog = Dog("Buddy")
cat = Cat("Whiskers")
print(dog.speak()) # 输出: Buddy says Woof!
print(cat.speak()) # 输出: Whiskers says Meow!
#Animal 是一个抽象基类,Dog 和 Cat 是它的子类。它们都实现了 speak() 方法,但具体实现不同,展示了多态的特性。
4、类方法和静态方法
类方法它的第一个形参一般是cls表示类本身,定义类方法需要使用@classmethod装饰器。
class Person:
total_persons = 0
def __init__(self, name):
self.name = name
Person.total_persons += 1
@classmethod
def show_total_persons(cls):
print("Total persons: ", cls.total_persons)
p1 = Person("Tom")
p2 = Person("Jerry")
Person.show_total_persons()
#创建了一个‘Person’类来记录创建的总人数。定义一个类方法‘show_total_persons()’来显示总人数。在实例化两个‘Person’对象后,再使用‘Person.show_total_persons()’来显示人数
静态方法它没有特殊的形参,通过装饰器@staticmethod来将方法升级为静态方法,一般在项目中的辅助类一般都会使用静态方法
class Calculator:
@staticmethod
def add(x, y):
return x + y
Calculator.add(3, 5)
#定义了一个静态方法‘add()’,然后在类名后面直接调用它