Python|Python 难点随笔
最近在学习使用python,也做了一些项目,还是觉得要记录一下,避免很多坑趟过之后就忘记了
一,python类继承
- 方法调用
class Foo:
def f1(self):
print('Foo.f1')
def f2(self): #self=obj
print('Foo.f2')#在父类中找到发 f2属性,第3步打印这一行
self.f1() #obj.f1()第4步再去掉用self的f1属性
class Bar(Foo):
def f1(self):#第五步, 在回到object自身的名称空间找f1属性,找到后调用
print('Bar.f1') #第6步 执行
obj=Bar() #第一步 :类的实例化, 先得到一个空对象,
obj.f2()#第2步:空对象调用f2属性 在自身寻找f2属性, 没有找到就去父类中寻找
#结果# 打印结果
Foo.f2
Bar.f1
# 理解重点:self代表的是实例,故先从自身查找,没有找到才会找父类,所以打印的是Bar的f1
- super
super是用来手动调用父类的,python3中更是简化了写法:super().xx(self)即可
class A:
def add(self, x):
y = x+1
print(y)
class B(A):
def add(self, x):
super().add(x)
b = B()
b.add(2)# 3
坑点:如果在子类的init()中使用super().xx(self)需要注意,谨慎起见,需先调用super().init(),如果在其他方法中则可直接使用(比如在pyqt5,UI编程的时候,必须先调用super().init(),初始化UI组件)
继承中的_ init _二,默认参数的坑
当在Python中出现继承的情况时,一定要注意初始化函数init的行为:
- 如果子类没有定义自己的初始化函数,父类的初始化函数会被默认调用;但是如果要实例化子类的对象,则只能传入父类的初始化函数对应的参数,否则会出错。
- 如果子类定义了自己的初始化函数,而在子类中没有显示调用父类的初始化函数,则父类的属性不会被初始化
- 如果子类定义了自己的初始化函数,在子类中显示调用父类,子类和父类的属性都会被初始化
在Python类中,不要使用引用类型,作为参数的默认值;
原因:当类函数调用未传参,默认参数初始化的时候,默认参数是一个类变量,实例变量仅仅是类变量的引用。造成实例之间数据错乱。
【Python|Python 难点随笔】~ ~~~~~~ 待续 ~~~~~~ ~
推荐阅读
- 生活随笔|好天气下的意外之喜
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- 25篇中考随笔
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则