一、先说最核心:类到底是个啥?

类就是一张通用模板、一张图纸、一个模具。class 就是用来画模板的关键字;根据模板造出来的具体东西,叫实例,造实例的过程叫实例化。

任何模板都分两块,代码里对应两个概念,我换通俗叫法:

特征(属性):名词,描述这个东西长啥样、有啥信息比如人:名字、年龄、身高;圆:半径;学生:学号、成绩

能干的事(方法):动词,这个东西能执行什么操作比如人:改名、查看年龄;圆:算面积、算周长;学生:修改分数

三、第一个关键词:init 初始化函数,模板的开工流程

大白话解释:每次你按照模板造一个实物的时候,程序会自动运行__init__,用来给这个实物填基础信息。

拿 Person(人类)举例:造人的时候,必须给他填名字、年龄,__init__就是专门接收这两个信息,存到这个人自己身上。

四、最迷惑的 self:“自己” 两个字解决所有疑问

  • p1 = Person ("马云云",18),这里 self 就是马云云本人
  • p2 = Person ("马云云云",20),这里 self 就是马云云云本人

五、上手写第一个简单类,逐行碎碎念讲解

# 1. 造一张“人”的模板(类)
class Person:
    # 2. 开工流程:造人的时候必须给名字、年龄
    def __init__(self, name, age):
        # 3. 把传进来的名字、年龄,存给这个人自己
        self.name = name
        self.age = age

    # 4. 动作1:查看自己名字
    def get_name(self):
        return self.name
    
    # 5. 动作2:修改名字
    def set_name(self, new_name):
        self.name = new_name
    
    # 6. 自我介绍动作
    def introduce(self):
        print(f"大家好,我叫{self.name},今年{self.age}岁")

# 照着模板造第一个人:小明,18岁(实例化)
p1 = Person("小明", 18)
# 调用自我介绍
p1.introduce()
# 改名字
p1.set_name("小明同学")
# 再自我介绍
p1.introduce()

# 再造第二个人,和小明完全互不干扰
p2 = Person("小李", 20)
p2.introduce()

六、再来个实用例子:圆形模板,算面积周长

看完人的例子,再来个数学相关的,巩固思路:

import math
# 圆形模板
class Circle:
    # 造圆的时候,必须输入半径
    def __init__(self, r):
        self.radius = r
    
    # 动作1:计算面积
    def get_area(self):
        return math.pi * self.radius ** 2
    
    # 动作2:计算周长
    def get_perimeter(self):
        return 2 * math.pi * self.radius

# 造一个半径5的圆
c1 = Circle(5)
print("圆面积:", round(c1.get_area(), 2))
print("圆周长:", round(c1.get_perimeter(), 2))

# 再造半径10的圆,互不影响
c2 = Circle(10)
print("大圆面积:", round(c2.get_area(), 2))

八、之前练习题里的点类,简化版复盘

import math
import random

# 坐标点模板:每个点有x、y两个特征
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    # 获取x坐标
    def get_x(self):
        return self.x
    # 获取y坐标
    def get_y(self):
        return self.y
    
    # 动作:计算和另一个点的距离
    def distance_to_other(self, other_point):
        dx = self.x - other_point.get_x()
        dy = self.y - other_point.get_y()
        return math.sqrt(dx**2 + dy**2)

# 随机生成两个点
p_a = Point(random.randint(-100,100), random.randint(-100,100))
p_b = Point(random.randint(-100,100), random.randint(-100,100))

print("两点距离:", round(p_a.distance_to_other(p_b), 2))

更多推荐