2.1.3 面向对象:类的方法(一)(Python)

本文详细介绍了Python中类的方法,包括self的使用、对象属性的关联、方法的调用以及初始化方法__init__的应用。通过实例展示了如何定义和调用方法,如何通过self访问和修改对象属性,以及如何使用__init__初始化对象属性。同时强调了self作为对象引用的作用,以及方法中参数的传递方式。
摘要由CSDN通过智能技术生成

本文来自异想之旅公开发布的Python教程,原文地址:https://www.yuque.com/yxzl/python

一个简单的方法

在类的内部,使用 def 定义的函数称作类的方法。类的方法的第一个参数必须是selfself代表的是类的实例。

class Student:
    name = ''
    age = 10

    def say_hello(self):
        print('Hello')

a = Student()
a.say_hello()  # 输出:Hello

self详解

上例中的say_hello虽然是一个方法,但是我们可以发现,无论这时候调用的是Student类的哪一个对象,这个方法的执行结果都是完全相同的。

可通常情况下,我们希望对象的方法根据对象的属性去执行动作:比如我要实现一个say_name方法,打印出对象的name属性,这该怎么办?现在就需要用上self了。

class Student:
    name = ''
    age = 10

    def say_name(self):
        print(self.name)

a = Student()
a.name = '小明'
a.say_name()  # 输出:小明

a.name = '小刚'
a.say_name()  # 输出:小刚

b = Student()
b.name = '小红'
b.say_name()  # 输出:小红

现在对象属性的执行就和对象的属性产生了联系。

self虽然被写在了方法函数定义的形式参数中,但是并不需要我们去为其赋值——Python 会自动将调用该方法的对象作为实际参数传给self。同时,self是被 Python 指定的关键字,不能按照我们的喜好去命名。

self直接作为对象去使用即可,因此它也可以修改属性、调用方法,具体请见下面的示例:

class Student:
    name = ''
    age = 10

    def say_hello(self):
        print('Hello')

    def say_name(self):
        print(self.name)

    def work(self):
        self.say_hello()
        self.name = '我的名字'
        self.say_name()

a = Student()

a.work()

输出:

Hello
我的名字

在上例中,a.work()等价于下面的代码:

a.say_hello()
a.name = '我的名字'
a.say_name()

需要传递参数的方法

class Student:
    name = ''
    age = 10

    def set_age(self, new_age):
        self.age = new_age

a = Student()
print(a.age)  # 10
a.set_age(20)
print(a.age)  # 20

对于更复杂的参数传递,实现和函数完全相同,这里不再赘述。只要注意形参列表中第一项为self、实参正常传递的原则即可。

初始化方法 __init__

类在实例化时会调用 __init__ 方法,完成一些类的初始化操作:

class Student:
    name = ''
    age = 10

    def __init__(self):
        print('对象初始化被执行')

a = Student()  # 输出:对象初始化被执行

当然,如果仅仅是输出一句话,__init__方法就有一些小题大做了。我们通常使用该方法为对象的一些属性进行初始的赋值操作:

class Student:
    '''
    由于我们在 __init__ 中定义了 name 和 age 两个属性,
    因此此处的定义完全可以删去,
    不会影响程序的运行和输出。
    '''
    name = ''
    age = 10

    def __init__(self, name=小明'', age=10):
        self.name = name
        self.age = age

a = Student()
print(a.name, a.age)  # 小明 10

b = Student('小红', 20)
print(b.name, b.age)  # 小红 20

你可以粗糙地理解为,在运行Student()实例化对象时,就是调用了__init__方法(虽然这句话并不正确)。

事实上,__init__是魔术方法的一种。

魔术方法,Python 中所有以双下划线__包起来的方法的统称。。这是一种的特殊方法,普通方法需要显式地调用,而魔术方法不需要调用,Python 会在特定事件执行且条件满足时自动执行。有关魔术方法的更多介绍,详见《类的方法(二)》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

异想之旅

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值