python基础教程总结分享——魔法方法
本帖最后由 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.
JokerShame 发表于 2022-3-21 19:35
可行啊,我有同学公司就专门给他们培训用Python处理表格进行数据分析,Python适合搞这个的
已转达,太感谢了!本来以为一个做财务的,怎么可能跨行搞编程呢,这回,可以坚定他学习信心了! genius_7321 发表于 2022-3-21 01:29
做数据分析当然可以了,不过还是得看掌握程度了
感谢指点!{:1_893:}已转达。我想,他的想法就是把EXCEL中不好处理的大量数据分析、图形化展示用编程语言来实现,这是不是算是基础应用了 蟹蟹分享,学习了 python好学吗?我也想去学习学习了 shawn9527 发表于 2022-3-20 21:42
python好学吗?我也想去学习学习了
单说语言的话是挺简单的,不过Python封装的有很多很多库,这个就需要多用多练去掌握了。我也是刚开始学,了解的不全面。 大神!学习贴,正好有用,感谢!!! gdgyf 发表于 2022-3-20 22:57
大神!学习贴,正好有用,感谢!!!
我是萌新;www共同学习,共同进步嗷:handshake 请教:我朋友做财务的,想学习Python替代EXCEL做数据分析,可行么?{:1_893:} 小白学习啦 kongkongruye 发表于 2022-3-20 23:25
请教:我朋友做财务的,想学习Python替代EXCEL做数据分析,可行么?
做数据分析当然可以了,不过还是得看掌握程度了 谢谢分享,学习了
页:
[1]
2