了解Python中的类

Python中的类(Class)概念

类是Python面向对象编程的核心概念,它是对现实世界中事物的抽象,将数据(属性)和操作数据的方法(行为)封装在一起。

  1. 什么是类,什么是对象?
  • 类(Class):是创建对象的蓝图或模板,定义了对象的属性和方法。(通俗来讲就是:将现实中的事物的某些特点抽离出来,形成一个描述这个事物的概念,这就叫类)
  • 对象(Object):是类的实例,具有类定义的属性和方法。(通俗来讲就是:通过类来具体的描述出一个事物,这个事物就是对象。)
  1. 类的定义
    类是由类属性、实例属性、实例方法、静态方法、类方法等等组成的。
  • 类属性:从事物中抽离的一些特征在class类中被叫做类属性。即,直接在类中定义的变量,所有的实例共有的属性。
  • 实例属性:在构造方法(_ _ init_ _)中定义的属性,每个实例特有的属性,可以通过 self.属性名 进行反复调用。
  • 实例方法:定义在类中的函数,包含self。一般通过变量.实例方法进行调用。
  • 静态方法:定义在类中的函数,但是需要使用@staticmethod修饰器进行修饰的方法。一般通过类.方法进行调用
  • 类方法:定义在类中的方法,但需要使用修饰器@classmethod进行修饰的方法,自带class参数。一般通过类.方法进行调用
    定义类和实例化类的示例:
# 在Python中需要使用关键字class来定义一个类,以下这个类的类名就叫Dog
class Dog:

	# 定义一个构造方法
    def __init__(self, name, breed):
        self.name = name 	# 实例属性
        self.breed = breed
    
    # 定义一个实例方法
    def speak(self):
        return f"{self.name} 汪汪叫!"

# 创建对象(实例化)
dog1 = Dog("阿黄", "金毛")
dog2 = Dog("小黑", "拉布拉多")

print(dog1.speak())  # 输出: 阿黄 汪汪叫!
print(dog2.speak())  # 输出: 小黑 汪汪叫!

  • 使用静态方法修饰器和类方法修饰器的示例:
class MyClass:
    def instance_method(self):
        """实例方法,可以访问实例和类属性"""
        return f"实例方法: {self}"
    
    @classmethod
    def class_method(cls):
        """类方法,可以访问类属性"""
        return f"类方法: {cls}"
    
    @staticmethod
    def static_method():
        """静态方法,不能访问类或实例属性"""
        return "静态方法"

obj = MyClass() 				# 类的实例化
print(obj.instance_method())  # 调用实例方法
print(MyClass.class_method())  # 调用类方法
print(MyClass.static_method())  # 调用静态方法
  1. 类的三大特性
  • 封装(Encapsulation)
    将数据和对数据的操作封装在一起,隐藏内部实现细节(直接调用方法不会直接访问到其内部的属性):
class BankAccount:
    def __init__(self, owner, balance=0):
        self._owner = owner       # 受保护属性
        self.__balance = balance  # 私有属性
    
    def deposit(self, amount):
        """存款方法"""
        if amount > 0:
            self.__balance += amount
            return True
        return False
    
    def get_balance(self):
        """获取余额"""
        return self.__balance

account = BankAccount("张三")
account.deposit(1000)
print(account.get_balance())  # 输出: 1000
  • 继承(Inheritance)
    子类继承父类的属性和方法:
# Animal是cat 类的父类
class Animal:
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        return "动物声音"
# cat就属于Animal的子类
class Cat(Animal):
    def speak(self):
        return "喵喵!"

cat = Cat("小花")
# 如果在cat中没有重写speak方法的话,那么会输出:动物声音
print(cat.speak())  # 输出: 喵喵!
  • 多态(Polymorphism)

多态就是:即便不知道变量所引用的对象到底是什么类型,但仍然可以通过这个变量调用对象的方法。即不同类的对象对同一方法调用做出不同响应:

class Dog:
    def speak(self):
        return "汪汪!"

class Cat:
    def speak(self):
        return "喵喵!"

def animal_sound(animal):
    print(animal.speak())

dog = Dog()
cat = Cat()

animal_sound(dog)  # 输出: 汪汪!
animal_sound(cat)  # 输出: 喵喵!
  1. Python类中的一些特殊方法
    Python类可以通过特殊方法实现各种功能:
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __add__(self, other):
        """定义加法行为"""
        return Vector(self.x + other.x, self.y + other.y)
    
    def __str__(self):
        """定义打印行为"""
        return f"Vector({self.x}, {self.y})"

v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2)  # 输出: Vector(4, 6)
  1. 在自己编写类的时候需要注意的事项
  • 遵循单一职责原则:一个类只负责一项功能
  • 优先使用组合而非继承:除非确实是"is-a"关系
  • 合理使用访问控制:保护内部实现细节
  • 适当使用属性装饰器:控制属性访问
  • 为类和方法添加文档字符串:提高代码可读性

总结:Python的类机制提供了强大的面向对象编程能力,理解并合理使用类在编写程序的过程中会减少很多不必要的代码,减少运行所花费的时间。

你可能感兴趣的:(python,python,开发语言)