首页 > 编程语言 >Python基础——类和对象

Python基础——类和对象

时间:2024-12-27 10:56:53浏览次数:11  
标签:__ name Python self 基础 对象 方法 def

目录

1. 定义类

2. 创建对象

3. 类和对象的示例

4. 类的方法

4.1 实例方法

4.2 类方法

4.3 静态方法

5. 类的继承

6. 封装与多态


在 Python 中,(Class)和对象(Object)是面向对象编程的核心概念。通过类和对象,可以组织和管理代码,使得代码更加模块化、可重用和易于维护。下面详细介绍类和对象的概念、定义方法和使用方法。

1. 定义类

类是创建对象的模板或蓝图。类定义了对象的属性(成员变量)和行为(方法)。通过类,你可以创建多个对象,每个对象都可以有不同的属性值和执行相同的操作。

定义类的语法:

class ClassName:
    # 类的属性(成员变量)
    attribute1 = value1
    attribute2 = value2
    
    # 类的方法(成员函数)
    def method1(self, param1, param2):
        # 执行一些操作
        pass
  • class ClassName: 定义类的名称。
  • 属性(成员变量):定义类的特征,通常在类的构造方法 __init__ 中初始化。
  • 方法(成员函数):定义类的行为,通常是类可以执行的操作。

2. 创建对象

对象是类的实例。通过类创建对象时,实际上是调用类的构造方法 __init__,将数据绑定到类的属性上,并且通过该对象可以访问类的方法。

创建对象的语法:

obj = ClassName()

一旦创建了对象 obj,你就可以通过这个对象访问类的属性和方法。

3. 类和对象的示例

示例 1:定义一个简单的类和创建对象

class Dog:
    # 初始化方法 (构造函数)
    def __init__(self, name, age):
        self.name = name   # 对象的属性
        self.age = age     # 对象的属性

    # 类的方法
    def bark(self):
        print(f"{self.name} says Woof!")

# 创建一个 Dog 类的对象
dog1 = Dog("Buddy", 5)

# 访问对象的属性
print(f"Dog's name is {dog1.name}, age is {dog1.age}")

# 调用对象的方法
dog1.bark()

解释:

  • __init__ 方法是类的构造函数,它在对象创建时被自动调用,用于初始化对象的属性。
  • self 是指向当前对象的引用,通过它你可以访问对象的属性和方法。
  • 在 dog1 = Dog("Buddy", 5) 这一行,创建了一个 Dog 类的对象,传入 name 和 age 属性。
  • dog1.bark() 调用了 Dog 类的方法 bark,输出 Buddy says Woof!

 示例 2:使用类变量和实例变量

class Car:
    # 类变量
    wheels = 4
    
    def __init__(self, brand, color):
        # 实例变量
        self.brand = brand
        self.color = color
    
    def description(self):
        return f"{self.color} {self.brand} with {Car.wheels} wheels."

# 创建 Car 类的对象
car1 = Car("Toyota", "Red")
car2 = Car("Honda", "Blue")

print(car1.description())  # 输出: Red Toyota with 4 wheels.
print(car2.description())  # 输出: Blue Honda with 4 wheels.

解释:

  • wheels 是一个类变量,它是属于类的所有对象共享的。
  • brand 和 color 是实例变量,它们是属于每个对象的,值可以不同。
  • 每个 Car 对象都可以访问类变量 wheels 和实例变量 brandcolor

4. 类的方法

4.1 实例方法

实例方法是定义在类中的方法,通常用于访问和操作对象的实例变量。方法的第一个参数是 self,它代表当前对象。

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.")
        
p1 = Person("Alice", 30)
p1.greet()  # 输出: Hello, my name is Alice and I am 30 years old.
4.2 类方法

类方法是绑定到类上的方法,而不是绑定到实例对象。类方法的第一个参数是 cls,代表类本身。类方法通过装饰器 @classmethod 来定义。常用来修改类变量或进行类相关的操作。

class MyClass:
    count = 0

    @classmethod
    def increment_count(cls):
        cls.count += 1

MyClass.increment_count()
print(MyClass.count)  # 输出: 1
4.3 静态方法

静态方法不需要访问类或实例变量。静态方法不使用 selfcls 作为参数,通常用于执行某些功能,但这些功能与类或对象的状态无关。静态方法通过装饰器 @staticmethod 来定义。

class Math:
    
    @staticmethod
    def add(a, b):
        return a + b

print(Math.add(3, 5))  # 输出: 8

5. 类的继承

Python 支持类的继承,使得一个类可以继承另一个类的属性和方法。继承可以帮助我们避免重复代码,提高代码复用性。

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        print(f"{self.name} makes a sound.")

# Dog 类继承自 Animal 类
class Dog(Animal):
    def speak(self):
        print(f"{self.name} barks.")

dog = Dog("Buddy")
dog.speak()  # 输出: Buddy barks.

解释:

  • Dog 继承了 Animal 类,因此 Dog 类可以访问 Animal 类的 __init__ 和 speak 方法。
  • 通过重写 speak 方法,Dog 类提供了自己特定的实现。

6. 封装与多态

  • 多态是指同一个方法或操作作用于不同类型的对象时,表现出不同的行为
  • 封装是指将对象的属性和方法包装在一个类中,隐藏实现细节,只暴露必要的接口供外界使用。

封装和多态是相辅相成的,封装通过隐藏内部实现保护数据,而多态则允许通过统一的接口处理不同的对象,使得代码更具灵活性。以下是一个结合封装和多态的示例:

class Shape:
    def area(self):
        raise NotImplementedError("子类必须实现此方法")

class Circle(Shape):
    def __init__(self, radius):
        self.__radius = radius

    def area(self):
        return 3.14 * self.__radius ** 2

class Rectangle(Shape):
    def __init__(self, width, height):
        self.__width = width
        self.__height = height

    def area(self):
        return self.__width * self.__height

# 使用多态和封装
def print_area(shape):
    print(f"面积是: {shape.area()}")

circle = Circle(5)
rectangle = Rectangle(4, 6)

# 调用相同的接口,不同的实现
print_area(circle)  # 输出: 面积是: 78.5
print_area(rectangle)  # 输出: 面积是: 24

在这个例子中:

  • 每个 Shape 类的子类(Circle 和 Rectangle)都封装了自己的属性(如半径和宽高),并提供了一个 area 方法来计算面积。
  • 通过 print_area 函数,我们可以对任意类型的 Shape 对象调用 area 方法,且每个类都根据自己的实现返回不同的结果,实现了多态。

总结

  •  是对一类对象的抽象,定义了它们的属性和行为。
  • 对象 是类的实例,是实际的存在,可以拥有特定的属性值和执行方法。
  • 通过类和对象,你可以实现面向对象编程的基本特性,如封装、继承和多态等。

标签:__,name,Python,self,基础,对象,方法,def
From: https://blog.csdn.net/qq_22964783/article/details/144754027

相关文章

  • Python系列之例题100题(21-25题)
    Hello!友友们,废话不多说开始上干货!!!21:斐波那契数列:又称兔子数列,指的是这样一个数列:1,1,2,3,5,8,13,21,34,……编写程序找出第n个项。(结果为8)#递归deffib(n)ifn==1orn==2:return1else:returnfib(n-1)+fib(n-2)print(fib(6))#非递归n......
  • 2024-2025-1 20241316 《计算机基础与程序设计》第十四周学习总结
    2024-2025-120241316《计算机基础与程序设计》第十四周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第十四周作业这个作业的目标《C语言程序设计》第13-14章并完成云班课测试作......
  • python+panddleocr+文本检测自定义数据集训练及测试
    python+panddleocr+文本检测自定义数据集训练及测试引言1相关链接2预训练模型及配置文件3文本检测的数据集格式文本检测训练测试1,标签转换(1)标签转换脚本(2)转换后的数据集结果2,训练(1)训练脚本(2)训练结果3,导出(1)导出脚本(2)导出结果4,测试......
  • python+panddleocr+文本方向分类训练导出测试
    python+panddleocr+文本方向分类训练导出测试引言采用角度分类器(反转180度判断)(1)Fan(2)Zheng方向分类器训练测试1,标签转换(1)标签转化脚本(2)转换后的数据集结果2,训练(1)命令行训练(2)训练脚本(3)训练结果3,模型导出(1)导出脚本(2)导出结果4,测试(1......
  • 计算机毕业设计Python+Spark知识图谱高考志愿推荐系统 高考数据分析 高考可视化 高考
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • 计算机毕业设计hadoop+spark+hive薪资预测 招聘推荐系统 招聘可视化大屏 招聘爬虫 Pyt
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • 【Linux】基础指令--(xshell - < unbuntu > )
    文章目录ls指令pwd命令cd指令touch指令mkdir指令rmdir指令&&rm指令rm命令可以同时删除文件或目录man指令cp指令mv指令cat指令more指令less指令head指令tail指令date指令cal指令find指令which指令whereis指令alias指令grep指令zip/unzip指令关......
  • 源码编译基于python3的cv_bridge
    源码位于工作空间visual下的ros_cv_bridgeubuntu20.04原生python版本就是python3,故直接用下列命令编译即可:catkin_make-DPYTHON_EXECUTABLE=$(whichpython)若编译过程中出现boost报错,把CMake文件中的boost改成python3即可find_package(PythonLibs)if(PYTHONLIBS_VERS......
  • 用Python开启人工智能之旅(五)AI项目实战中Python基础
    用Python开启人工智能之旅(一)Python简介与安装用Python开启人工智能之旅(二)Python基础用Python开启人工智能之旅(三)常用的机器学习算法与实现用Python开启人工智能之旅(四)常用的机器学习算法与实现用Python开启人工智能之旅(五)AI项目实战中Python基础在实际的AI项目中,应用......
  • GO 学习笔记之三 基础语法(5) 切片
    一、定义Go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。其存在容量和长度的说法,长度是实际数据的长度,容量是可容纳的数组长度。容量......