面向对象第三天,心好累

首先昨日内容回顾

1成员,  

变量

  -类变量(静态字段)  类 字段/对象。字段

  -示例变量(字段) 对象。字段

方法

  -实例方法      对象。方法名

  -静态方法      类。方法名/对象。方法名

  -类方法       类。方法名/对象。方法名

属性

  -属性         对象。属性名

修饰符      就是@staticmethod   @classmethod   这是方法修饰符都是在方法上写的

     属性修饰符也一样property

组合(嵌套) 这个比较重要,今天重要的课程也是补充这个

今天内容主要是组合补充了一下

  主动调用其他类的成员    方式一:

                class base(object):

                  def f1(self):

                    print(‘5’)

                class foo(object):

                  def f1(self):

                    print (‘3)

                    base。f1(self)  这里注意不存在类的继承,不继承也能用

                obj=foo()

                obj。f1()

               总结    base。实例方法(自己传self) 与继承无关,这打印3后打5

      方式2,按照类的继承顺序,找下一个。

            class foo(object):

                def f1(self):super是按照类的继承顺序去找下一个

                  super()。f1()这里注意super找的是self

                  print(‘3’)

            class bar(object):

                def f1(self):

                  print(‘6’)

            class info(foo,bar);

                  pass

            obj=foo()

            obj=f1()  这个正常走f1没什么

            obj=info()

            obj。f1()这个就是继承顺序了

特殊方法  class  foo(object):

      def  __init__(self,a1,a2):

         self.a1=a1

         self.a2=a2

      def    __call__(self,*args,**kwargs):    args万能传参,kwargs关键字传参

        print( 1 , args ,  kwargs)     args单独的传参都能接收,关键字传参变成字典

      def  __getitems__(self,item)

        print(item)

        return 1

      def  __setitems__(self,key,value)

        print(key,value,任何值)打印出来的xx 11  任何值

      def __delitem__(self,key):

        print(key)

      def __add__(self,other):

        return  self.a1+other+a2

      def __enter__(self):

        print('1')    可以return

 

      def __exit__(self  ,一堆自己出的):

        print(‘2’)

      def    __new__(cls,*args,**kwargs):  正常是先执行new再执行init 如果有new必须有返回值才执行init    返回值就是对象, return object。__new__(cls)

new 内部创建一个空对象,然后传给init  就是为了把对象和值,通过new传一下

      v1=object.__new__(cls)

      return  v1         他这个v1和下边的obj内存地址是一样的,只是下面的是把值传给类之后的init之后的obj里面有东西 v1是空的

new 构造方法       init初始化方法

obj = foo (1,2)      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.      对象=类名()自动执行__init__   括号内可传值

  obj=foo(实参)

2.     对象() 自动执行__call__

  obj(实参,关键字实参)      如果上面有return  也能打印返回值   a=obj。。。  print (a)

3.对象 【】 自动执行__getitems__

obj【‘实参’】    打印这个实参   如果上面有return  也能打印返回值   a=obj。。。  print (a)

4.对象 【】 自动执行__setitems__

 obj【‘xx’】=11             这个没有返回值 a=obj【x】=2  这个导致a 和x都等于2

5。del   对象【xx】   自动执行__delitem__

del  obj【‘aa’】               这个也没有返回值

6。对象+对象            自动执行__add__

obj1=foo(1,2)

boj2=foo(8,9)

obji1+obj2       a=obj1+obj2   print(a)

7.with 对象

obj=foo(1,2)        obj=foo(1,2)

with obj:          with obj  as   f:

  print(‘中间’)          print(f)  这个f就是返回值    类似文件操作

8.真正的构造方法