概述
函数
内置函数+自定义函数
函数声明
def funName([*]params):
print("function context...")
[return 's']
/
pass
/
my_fun=lambda a,b:a-b
函数调用
funName(1)
funName(1,2)
print(my_fun(3,2))
模块与包
一个.py结尾的文件就是一个模块,python中有很多自带模块(标准库)和第三方模块,模块间可以引用。
包是存放模块的文件夹。3.3版本以前,文件夹中有__init__.py其他包才可以引用此包模块等。
创建包
引用
import只是不能引用包,可以引用模块,函数,变量等(可以直接使用“.”,但在用的时候也要加上完整路径名)
也可以form 包 import 模块
,form 模块 import 函数等
,form ... import *
注:from后面引入 可省略(from后面只能是包,模块)
面向对象
创建
class cat:
# 这些都是类的属性
name=""
__id=0
def __init__(self):
# 构造器
cat.name="波斯猫"
cat.__id=1
#这些才是对象的属性
self.call="mie"
def eat(self,food):
# 共有方法(self是cat对象)
print(cat.name+"在吃"+food)
def run(speed):
# 静态方法
print(cat.name + "在以"+speed+"的速度跑,它的id是"+str(cat.__id))
使用
from study_enumerate import cat
cat.run("猫")
c= cat()
c.eat("火腿")
继承
可多继承,父类方法可重写
特:构造器
创建
class son(father):
pass
class PersianCat(cat):
def __init__(self): # 重写父类构造器
# cat.__init__(self)
super().__init__() # 调用父类构造器
# super().name="波斯猫" # 报错
cat.name="波斯猫"
# super().call="miao" # 报错,'super' object has no attribute 'call'
print(self.call) # 注释父类构造器后,'PersianCat' object has no attribute 'call'
self.call="miao" # self是PersianCat的实例
print(self.call)
# 那super()是什么,它不能当cat类对象用,也不能当cat实例化对象用,只能用来调用构造器?
super函数:python内置函数
用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。(我的理解是钻石继承就是菱形继承,事实证明的确是这样)
上面说的如果不是很懂的话,就看下面讲解:
通常情况下,我们在子类中定义了和父类同名的方法,那么子类的方法就会覆盖父类的方法。而super关键字实现了对父类方法的改写(增加了功能,增加的功能写在子类中,父类方法中原来的功能得以保留)。也可以说,super关键字帮助我们实现了在子类中调用父类的方法
super函数深入:
MRO(Method Resolution Order):python对于每一个类都有一个MRO列表. 此表的生成有以下原则:子类永远在父类之前,如果有多个父类,那么按照它们在列表中的顺序被检查,如果下一个父类有两个合法的选择,那么就只选择第一个
例1:
super(cls, inst):
mro = inst.__class__mro()
return mro(mro.index(cls) + 1)
super做了两件事情,获取mro列表,然后返回列表中下一个类
例2:
输出如下:
super(C, self).init()
self是C的实例,这个就返回了C的MRO列表
main.C,main.B, main.A, main.Base, object
调用
persian = PersianCat()
persian.eat("西餐")
最后
以上就是无限发箍为你收集整理的函数,模块与包,面向对象(super函数)的全部内容,希望文章能够帮你解决函数,模块与包,面向对象(super函数)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复