python教程:python中的self的讲解及其应用的列子

Python中self的作用与使用
部署运行你感兴趣的模型镜像

在 Python 中,self 是类方法的第一个参数,它代表类实例本身。当调用类的实例方法时,self 允许访问和修改实例的属性和方法。虽然 self 不是 Python 的关键字,但它是约定俗成的名称,用于清楚地表示类中的方法是属于类的实例,而不是属于类本身或其他对象。

self 的作用和功能

  1. 表示类实例本身:在类的方法中,self 引用当前对象的实例。通过 self,可以访问实例的属性和方法。
  2. 绑定实例变量:通过 self 可以为对象绑定属性,这些属性是与该实例相关的,而不是与类本身相关。
  3. 区分实例变量和局部变量self 区分实例变量和方法内的局部变量。通过 self,实例变量可以在不同的方法间共享,而局部变量只能在其方法内使用。

如何使用 self

  • 在定义实例方法时,self 必须作为方法的第一个参数(但调用时无需传入,Python 会自动传递实例对象)。
  • 使用 self.属性名 可以访问和设置实例属性。
  • 使用 self.方法名() 可以调用同一个实例中的其他方法。

示例:定义类并使用 self

class Person:
    def __init__(self, name, age):
        # 使用 self 绑定实例变量
        self.name = name
        self.age = age

    def greet(self):
        # 通过 self 访问实例的属性
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

    def have_birthday(self):
        # 通过 self 修改实例的属性
        self.age += 1
        print(f"Happy Birthday! I am now {self.age} years old.")

# 创建 Person 类的实例
person = Person("Alice", 30)

# 调用实例方法,Python 会自动传递 self
person.greet()  # 输出:Hello, my name is Alice and I am 30 years old.

# 调用另一个实例方法
person.have_birthday()  # 输出:Happy Birthday! I am now 31 years old.

解释:

  1. __init__ 构造方法

    • __init__ 是 Python 中的构造函数,实例化对象时会自动调用。
    • self 表示新创建的对象,通过它可以为对象绑定属性。在上例中,self.nameself.age 绑定了实例的 nameage 属性。
  2. 实例方法 greethave_birthday

    • greet 方法通过 self.nameself.age 访问实例的属性。
    • have_birthday 方法通过 self.age += 1 修改实例的属性,并输出新的年龄。

调用过程

person.greet() 被调用时,Python 实际上是调用 Person.greet(person),因此 self 被自动传递为实例 person

self 在继承中的应用

在继承中,self 也用于访问子类和父类的属性和方法。

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

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

class Dog(Animal):
    def speak(self):
        # 通过 self 调用父类的方法
        super().speak()
        print(f"{self.name} barks.")

# 创建 Dog 类的实例
dog = Dog("Buddy")
dog.speak()

# 输出:
# Buddy makes a sound.
# Buddy barks.

解释:

  1. Dog 类继承自 Animal 类,Dog 中的 speak 方法调用了 super().speak(),这意味着调用父类 Animalspeak 方法。
  2. self 在子类中表示当前对象的实例,因此它可以调用子类和父类的方法。

self 的必要性

  • 区别实例的属性和方法self 是 Python 类实例中不可或缺的一部分,它确保了方法调用和属性访问与特定的实例相关联。没有 self,实例方法将无法正确区分实例变量和局部变量。
  • 让方法绑定到实例上:Python 自动将实例作为第一个参数传递给实例方法,所以 self 是必须的,虽然调用时不需要手动传入。

不使用 self 的错误示例

如果你在定义实例方法时忘记了 self,会导致错误:

class Person:
    def greet():  # 缺少 self 参数
        print("Hello!")

person = Person()
person.greet()  # 会抛出 TypeError: greet() takes 0 positional arguments but 1 was given

在这个例子中,greet() 方法应该接收一个 self 参数,调用时会自动传递该实例。

总结

  • self 是类实例方法中的第一个参数,表示当前对象。
  • 通过 self 可以访问和修改实例的属性,也可以调用其他实例方法。
  • self 的使用使得 Python 能够区分类的实例变量和局部变量。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值