• 一、组合补充
    • 1、类和对象也可以充当字典的key
    • 2、在类的使用当中主要是搞清楚其中的self代表的是谁
  • 二、主动调用其他类的成员
    •  1、在不同的两个类之间,其中一个类想要调用其他类中的成员的方法,可以直接使用被调用的类名后面跟上方法,这样做法便不能自动后传参
      class Foo:
          def f1(self):
              print("吾即大灾变")
      class Base:
          def f2(self):
              Foo.f1(1)           #这里python便不能自动给其中传参,需要手动传参 
      obj=Base()
      obj.f2()    
      

       当然,我们还可以这样

      class Foo:
          def f1(self):
              print("吾即大灾变")
      class Base:
          def f2(self):
              sk=Foo()                #我们可以提前将它实例化,这样便和普通调用没有什么区别
              sk.f1()
      obj=Base()
      obj.f2()
      

       

                  

    • 2、或者可以使用super( ).f1( ),按照继承顺序一个一个的查找,但是我们得知道这样一件事,super函数不是简单的按照父级顺序查找,而是按照继承顺序一个一个的查找下去
      class Foo:
          def f1(self):                   #第二步,我们在Info类之中无法找到该功能之后,我们便在他的第基类中寻找
              super().f1()      #第三步,调用super函数,由于使用Info的对象调用函数故此时super会找第二个父类
              print("一无是处")           #第六步,继续打印,程序结束
      class Bar:                          #第四部,super会从此类中开始寻找方法
          def f1(self):
              print("没有猎物的猎手")        #第五步,找到方法,完成打印功能
      class Info(Foo,Bar):
          pass
      obj=Info()
      obj.f1()                            #第一步:我们使用对象那个obj开始调用方法f1
      

       最后的打印结果便是 “没有猎物的猎人”和“一无是处”

  • 三、特殊成员
    • 1、类名后加入一个括号,会自动执行__init__()函数
    • 2、对象加入括号 ,将会自动执行__call__( )函数
    • 3、对象加中括号,将会自动执行__getitem__( )函数
    • 4、对象加中括号=一个值 ,将会自动执行__setitem__()函数,此函数无返回值
    • 5、del 对象[ ] ,将会自动执行__delitem__( )函数,此函数无返回值
    • 6、对象+对象,会自动执行__add__( )函数
    • 7、with 对象,会自动执行两个函数,__enter__( )和__exit__( )两个函数,其中第一个函数返回值,我们可以使用with 对象 as f,的方法让f获得那个返回值
    • 8、真正的构造方法
      • 其实在类名中间加入括号的情况下真正先执行的是__new__( )函数,在这个函数之中,我们可以给它返回object.__new__(cls),我们在使用对象名接受到这个值,这样才会接着在init函数之中执行数据初始化组合补充、某类中寻找其他类的方法以及特殊成员
posted on 2018-08-29 16:12  哈尔斯塔特  阅读(89)  评论(0)    收藏  举报