返回笔记列表
01 · NOTES / Python

面向对象

2026 年 1 月 18 日

面向对象

分类:Python

最后修改时间:2026-01-18 16:27:01.094


语法格式

# 定义一个类(类名通常用大驼峰写法)
class 类名:
    def __init__(self, 参数1, 参数2, 参数3):
        self.属性名 = 参数1
        self.属性名 = 参数2
        self.属性名 = 参数3

示例:定义一个Person类

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

相关说明:

  1. 类名通常采用大驼峰命名法(如:Person、UserInfo)。
  2. 类中所定义的函数,通常又称为方法
  3. __init__方法叫初始化方法,当我们对类进行实例化时,Python会自动调用__init__方法。
  4. __init__方法的名字不能更改,否则 Python 无法自动调用。
  5. __init__收到的第一个参数是当前正在创建的实例对象,形参通常用self。
  6. __init__方法收到的除self以外的参数,通常用来设置实例的属性值,通过"点"语法实现:属性名 = 属性值

创建实例

语法格式

实例名 = 类名(参数1, 参数2, ...)

代码示例

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

# 创建Person的实例对象
p1 = Person('张三', 18, '男')
p2 = Person('李四', 22, '女')
  • 通过实例的"点"语法,可以『访问』或『修改』实例的属性。
print(p1)
print(p2)
print(p1.name)
print(p1.age)
print(p1.gender)
p1.name = '阿三'
  • 通过**实例.dict **的方式,可以查看实例身上的所有属性。
print(p1.__dict__)
print(p2.__dict__)
  • 在实例创建完毕后,也可以通过实例.属性名 = 值的形式,给实例追加属性。
p1.address = '北京昌平宏福科技园'
print(p1.__dict__)
  • 通过type() 函数,可以查看某个实例对象,是由哪个类创建出来的。
print(type(p1))
print(type(p2))

自定义方法

类是用来规定一类事物所具有的『属性』和『行为』,在上一小节中,我们已经通过 self.属性名 = 值的形式,为实例对象添加了『属性』;接下来,要想让对象具备相应的『行为』,就需要通过『自定义方法』来实现。

『自定义方法』的第一个参数也是self,是调用该方法的实例对象。

# 定义一个Person类
class Person:
    # 初始化方法(给实例添加属性)
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    # 自定义方法(给实例添加行为)
    def speak(self, msg):
        print(f'我叫{self.name}, 年龄是{self.age}, 性别是{self.gender},我想说:{msg}')

# 创建Person类的实例对象
p1 = Person('张三', 18, '男')
p2 = Person('李四', 22, '女')

# 当执行p1.speak()的时候,查找speak方法的过程:1.实例对象自身(p1)  =>  2.实例的"缔造者"的身上(Person)

实例属性

1️⃣定义:通过实例.属性名 = 值定义在实例身上的属性,称为:实例属性。 2️⃣特点:

  1. 每个实例都有自己『独立的一份』实例属性,各个实例之间是互不影响的。
  2. 实例属性只能通过实例.xxxx访问和修改,不能通过『类名』访问或修改。
class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

p1 = Person('张三', 18, '男')
p2 = Person('李四', 22, '女')

# 实例属性只能通过实例访问,不能通过类访问
print(p1.name)
print(Person.name)  # 报错

分类:Python / 面向对象

最后修改时间:2026-01-19 08:44:50.089

实例方法

定义:类中所定义的方法,最终会保存在类身上,并且主要是通过实例调用,所以叫:实例方法。 特点:

  1. 实例方法虽然最终会保存在类身上,但它主要是供实例使用的,所以才叫实例方法。
  2. 因为收到了self参数,所以其内部可以:访问实例属性,调用实例方法。
  3. 实例方法的主要作用:定义实例对象具体行为
class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def speak(self, msg):
        print(f'我叫{self.name}, 年龄是{self.age}, 性别是{self.gender},我想说:{msg}')

    def run(self, distance):
        print(f'{self.name}疯狂的奔跑了{distance}米')

p1 = Person('张三', 18, '男')
p2 = Person('李四', 22, '女')

# 通过实例调用实例方法
p1.speak('你好')
p1.run(300)

# 通过类去调用实例方法(能调用,但不推荐)
Person.run(p2, 100)

类属性

1️⃣定义: 在类中直接写赋值语句(例如:a = 100),就会在类身上添加一个a属性,值为 100,此时的a就是『类属性』,它属于类本身,由类所拥有,并且该类创建出来的所有实例对象,都能去访问a属性。 2️⃣特点:

  1. 所有实例访问的,都是同一个类属性,所以类属性通常用于:存放公共数据。
  2. 类属性即可以通过『类』访问,也可以『实例』访问。
class Person:
    max_age = 120
    planet = '地球'

    def __init__(self, name, age, gender):
        self.name = name
        self.gender = gender
        if age <= Person.max_age:
            self.age = age
        else:
            print(f'年龄超出范围了,已经将年龄设置为最大值:{Person.max_age}')
            self.age = Person.max_age

3️⃣特别注意: 进行实例.属性名 = xxx操作时,只会对实例自身的属性起作用(有则修改,无则添加)!

p1.planet = '火星'
print(Person.__dict__)
print(p1.__dict__)

类方法

定义:使用@classmethod装饰器修饰,第一个参数是类本身,通常用形参cls接收。 特点:

  1. 可通过『类名』或『实例名』调用,但强烈推荐通过类名调用以体现语义。
  2. 因为收到了cls参数,所以内部可以访问类属性。
  3. 一般用于:实现与类相关的逻辑,如:操作类级别的信息、工厂方法等。
from datetime import datetime

class Person:
    max_age = 120
    planet = '地球'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    @classmethod
    def change_planet(cls, value):
        cls.planet = value

    @classmethod
    def create(cls, info_str):
        name, year, gender = info_str.split('-')
        current_year = datetime.now().year
        age = current_year - int(year)
        return cls(name, age, gender)

# 类方法需要通过类调用
# Person.change_planet('月球')
# p3 = Person.create('李华-2003-女')
# 注意点:类方法,也能通过实例调用到,但是非常不推荐
p4 = p1.create('李华-2003-女')
print(p4.__dict__)

静态方法

**定义:**使用@staticmethod装饰器修饰,方法没有self或cls参数,只是单纯的定义在类中。 特点:

  1. 可通过『类名』或『实例名』调用,但强烈推荐通过类名调用以体现语义。
  2. 由于没有self或cls参数,所以静态方法中通常:不访问类属性,也不访问实例属性。
  3. 一般用于:定义与类相关,但可以独立使用的工具方法
class Person:
    @staticmethod
    def is_adult(year):
        current_year = datetime.now().year
        age = current_year - year
        return age >= 18

    @staticmethod
    def mask_idcard(idcard):
        return idcard[:6] + '********' + idcard[-4:]

# 静态方法需要通过类去调用
# result = Person.is_adult(2015)
# result2 = Person.mask_idcard('212101198802030028')
# 注意点:通过实例也能调用到静态方法,但非常不推荐
p1 = Person('张三', 18, '男')
res = p1.mask_idcard('212101198802030028')
print(res)

TAGSpython