美文网首页Python
Python 难点随笔

Python 难点随笔

作者: Chaos_YM | 来源:发表于2020-01-08 11:05 被阅读0次

    最近在学习使用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属性, 没有找到就去父类中寻找<br><br>#结果
    
    # 打印结果
    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 难点随笔

        本文链接:https://www.haomeiwen.com/subject/igwjactx.html