吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2419|回复: 17
收起左侧

[Python 转载] python基础教程总结分享——魔法方法

[复制链接]
JokerShame 发表于 2022-3-20 17:30
本帖最后由 JokerShame 于 2022-3-20 17:34 编辑

在Python中,有些名称很特别,开头和结尾都是两个下划线。在这样的名称中,很大一部分都是魔法(特殊)方法的名称。如果你的对象实现了这些方法,它们将在特定情况下(具体是哪种情况取决于方法的名称)被Python自动调用。

1、构造函数
构造函数即创建示例时使用的初始化方法,命名为__init__。构造函数不同于普通方法的地方在于,将在对象创建后自动调用。
例如:
class Car:
    def __init__(self):
        self.name = 'Audi A6'


>>>f = Car()
>>>print(f.name)
Audi A6

2、继承
子类可以从其超类中继承方法,对子类的实例调用方法(或访问其属性)时,如果找不到该方法(或属性),将在其超类中查找。要在子类中定制继承而来的行为,使其与超类的对应方法不同,对于普通方法,直接重写即可。但重写构造函数时,必须同时调用一遍超类的构造函数,否则可能无法正确地初始化对象。
例如:
class Bird:
    def __init__(self):
        self.hungry = True
    def eat(self):
        if self.hungry:
            print("Eating...")
            self.hungry = False
        else:
            print("No, thanks.")


>>>b = Bird()
>>>b.eat()
Eating...
>>>b.eat()

No, thanks.

这时候,如果创建的Bird的子类没有调用Bird的构造函数的话,子类在调用涉及到超类初始化的属性时就会报错
class Bird:
    def __init__(self):
        self.hungry = True
    def eat(self):
        if self.hungry:
            print("Eating...")
            self.hungry = False
        else:
            print("No, thanks.")


class SongBird(Bird):
    def __init__(self):
        self.sound = 'Squawk!'
    def sing(self):
        print(self.sound)


>>>sparrow = SongBird()
>>>sparrow.sing()
Squawk!
>>>sparrow.eat()
Traceback (most recent call last):
  File "xxx", line 21, in <module>
    sparrow.eat()
  File "xxx", line 5, in eat
    if self.hungry:
AttributeError: 'SongBird' object has no attribute 'hungry'

子类的构造函数调用超类的构造函数有两种方法:调用未关联的超类构造函数,或者使用函数super。

调用未关联的超类构造函数:
class SongBird(Bird):
    def __init__(self):
        Bird.__init__(self)
        self.sound = 'Squawk!'
    def sing(self):
        print(self.sound)


>>>sparrow = SongBird()
>>>sparrow.sing()
Squawk!
>>>sparrow.eat()
Eating...
>>>sparrow.eat()
No, thanks.
如上,只需要在子类中添加一行,Bird.__init__(self)。这样做为什么管用呢,对实例调用方法时,方法的参数self将自动关联到实例(称为关联的方法)。然而如果通过类调用方法(如Bird.__init__),就没有实例与其相关联。在这种情况下,你可随便设置参数self。这样的方法称为未关联的。通过将这个未关联方法的self参数设置为当前实例,将使用超类的构造函数来初始化这个实例。

使用函数super:
调用函数super时,将当前类和当前实例作为参数。对其返回的对象调用方法时,调用的将是超类的方法。因此,在SongBird的构造函数中,可不使用Bird,而是使用super(SongBird,self),在python3中调用函数super时,可不提供任何参数。
例如:
class Bird:
    def __init__(self):
        self.hungry = True
    def eat(self):
        if self.hungry:
            print("Eating...")
            self.hungry = False
        else:
            print("No, thanks.")


class SongBird(Bird):
    def __init__(self):
        super().__init__()
        self.sound = 'Squawk!'
    def sing(self):
        print(self.sound)

>>>sparrow = SongBird()
>>>sparrow.sing()
Squawk!
>>>sparrow.eat()
Eating...
>>>sparrow.eat()
No, thanks.

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Long0296 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kongkongruye 发表于 2022-3-21 21:53
JokerShame 发表于 2022-3-21 19:35
可行啊,我有同学公司就专门给他们培训用Python处理表格进行数据分析,Python适合搞这个的

已转达,太感谢了!本来以为一个做财务的,怎么可能跨行搞编程呢,这回,可以坚定他学习信心了!
kongkongruye 发表于 2022-3-21 21:55
genius_7321 发表于 2022-3-21 01:29
做数据分析当然可以了,不过还是得看掌握程度了

感谢指点!已转达。我想,他的想法就是把EXCEL中不好处理的大量数据分析、图形化展示用编程语言来实现,这是不是算是基础应用了
大方 发表于 2022-3-20 20:41
shawn9527 发表于 2022-3-20 21:42
python好学吗?我也想去学习学习了
 楼主| JokerShame 发表于 2022-3-20 22:56
shawn9527 发表于 2022-3-20 21:42
python好学吗?我也想去学习学习了

单说语言的话是挺简单的,不过Python封装的有很多很多库,这个就需要多用多练去掌握了。我也是刚开始学,了解的不全面。
gdgyf 发表于 2022-3-20 22:57
大神!学习贴,正好有用,感谢!!!
 楼主| JokerShame 发表于 2022-3-20 23:03
gdgyf 发表于 2022-3-20 22:57
大神!学习贴,正好有用,感谢!!!

我是萌新共同学习,共同进步嗷
kongkongruye 发表于 2022-3-20 23:25
请教:我朋友做财务的,想学习Python替代EXCEL做数据分析,可行么?
yqwangjie 发表于 2022-3-20 23:40
小白学习啦
genius_7321 发表于 2022-3-21 01:29
kongkongruye 发表于 2022-3-20 23:25
请教:我朋友做财务的,想学习Python替代EXCEL做数据分析,可行么?

做数据分析当然可以了,不过还是得看掌握程度了
LimpidLuster 发表于 2022-3-21 09:09
谢谢分享,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-20 01:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表