zoukankan      html  css  js  c++  java
  • 类的继承派生&&重写

    1.继承的定义:             被继承的父类必须放在字类上面

    python中一个子类可以继承多个父类

    继承是创建类的一种方式,新建的类称为字类或派生类,继承的类称为父类或基类

    继承的作用: 减少代码冗余

    在继承背景下对象属性的查找顺序:对象的名称空间 ---子类的名称空间---父类的名称空间

    2. 派生:指的是字类继承父类的方法和属性,并派生出自己独有的属性和方法 ,

                  若字类中存在与父类相同的方法,则该方法为重写

     1. 类继承的两种方式   和  派生

        super()为父类对象    可以调用父类的属性和方法

    # 继承__init__方法的两种方式
    class OldboyPeople:
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
    def simple_method(self):
         print('父类的方法')
        
    class Teacher(OldboyPeople): def __init__(self,name,age,sex,salary): # OldboyPeople.__init__(self,name,age,sex) # 第一种方式 父类名.__init__的方式 必须带上self # self.salary = salary super().__init__(name,age,sex) # 第二种方式: 通过super().__init__的方式 不需要带上self self.salary = salary def change_score(self): # 子类派生出自己的方法 print(f'老师{self.name}修改分数中,工资为{self.salary}。。')
    super().simple_method() t
    = Teacher('tank',17,'female',100) t.change_score()

    2. 重写父类方法

    例1:基础示例

    # 父类
    class Foo:
        def f1(self):
            print('from Foo.f1...')
        def f2(self):  # self ---> bar_obj
            print('from Foo.f2...')
            # bar_obj.f1() ---> 对象自己找 ---> Bar ---> Foo
            self.f1()
    # 子类
    class Bar(Foo):
        # 重写
        def f1(self):
            print('from Bar.f1..')
        def func(self):
            print('from Bar.func...')
    
    bar_obj = Bar()
    bar_obj.f2()
    
    '''
    结果1: 
        from Foo.f2...
        from Bar.f1...
    '''

    例2:重写drf reponse类的__init__方法

    先写自己的__init__方法,然后再调用父类的__init__方法,把修改过的参数,数据 重新传给父类的__init__方法

    from rest_framework.response import Response
    '''
    def __init__(self, data=None, status=None,
                     template_name=None, headers=None,
                     exception=False, content_type=None):
    '''
    
    class APIResponse(Response):
        def __init__(self, status=0, msg='ok', http_status=None, headers=None, exception=False, **kwargs):
            # 将外界传入的数据状态码、状态信息以及其他所有额外存储在kwargs中的信息,都格式化成data数据
            data = {
                'status': status,
                'msg': msg
            }
            # 在外界数据可以用result和results来存储
            if kwargs:
                data.update(kwargs)
    
            super().__init__(data=data, status=http_status, headers=headers, exception=exception)

    3.使用

    class CarAPIView(APIView):
        def get(self, request, *args, **kwargs):
            pk = kwargs.get('pk')
            if pk:
                try:
                    car_obj = models.Car.objects.get(pk=pk)
                    car_serializer = serializers.CarModelSerializer(car_obj, many=False)
                    # return Response({
                    #     'status': 0,
                    #     'msg': 'ok',
                    #     'result': car_serializer.data
                    # })
                    return APIResponse(result=car_serializer.data)
                except:
                    # return Response(
                    #     data={
                    #         'status': 1,
                    #         'msg': 'pk error'
                    #     },
                    #     status=status.HTTP_400_BAD_REQUEST,
                    #     exception=True
                    # )
                    return APIResponse(status=1, msg='pk error', http_status=400, exception=True)
    
            else:
                car_queryset = models.Car.objects.all()
                car_serializer = serializers.CarModelSerializer(car_queryset, many=True)
                # return Response({
                #         'status': 0,
                #         'msg': 'ok',
                #         'results': car_serializer.data,
                #     })
                return APIResponse(results=car_serializer.data)
  • 相关阅读:
    Spring Boot启动过程(四):Spring Boot内嵌Tomcat启动
    dubbox注解的一个坑
    内嵌Tomcat的Connector对象的静态代码块
    Spring Boot启动过程(三)
    Spring Boot启动过程(二)
    Spring Boot启动过程(一)
    SpringMVC基础学习(二)—开发Handler
    JS弹出框
    Oracle的基本学习(三)—函数
    Oracle的基本学习(二)—基本查询
  • 原文地址:https://www.cnblogs.com/bigbox/p/11938825.html
Copyright © 2011-2022 走看看