• 面向对象编程


     

    必知:Python中有两种编程方式:

        1.函数式编程

        2.面向对象编程: 其实就是对类和对象的应用

    1.类的创建:

    格式:

        class 类名:
          def 方法名():

    2.类中方法的调用:

    1.定义好一个类后

    2.将类赋值给一个自定义的对象

    3.利用自定义的对象来调用类中的方法

    示例:

    class bar:  # 定义一个类
        def foo(self): # 定义一个方法
            print('hello world ')
            
    # 以上就是完成类的创建了
    
    # 下面是对类中方法的调用
    
    obj = bar()   # 自定义一个对象,将类名加括号赋值给对象
    
    obj.foo()   # 通过'对象.方法名'的方式来调用

    3.类中默认的__init__方法(构造方法):

      当你执行将类名赋值给对象是,Python内部自动执行的一个函数,所以进行封装时也可以利用这个方法,可以让你的代码看起来更漂亮

    方法中的默认self参数:

      self参数Python内部在你调用方法的时候,自动传值的参数,其实他代指的是调用方法的对象的名字(也就是上面例子中的obj对象)

    4.面向对象的三大特性:

    1.封装:

      1.就是当你的函数的参数中有许多的共同且不变的参数时,可以直接将值封装在对象中

      2.利用类的特性,__init__方法,在方法中封装公用的值

      

    class bar:
        def __init__(self, name, age):
            self.name = name
            self.age = age
            self.blood = 'o'
        def show_info(self, hobby):
            print(self.name, self.age, self.blood, hobby)
    
    
    alex = bar('alex', 15)
    
    alex.show_info('jklsjdfljk')

    2.继承(可以多代继承)

      子代可以继承父代类中的方法

      示例:

    class bar:  # 父类(基类)
        def show_name(self):
            print('hello')
        def show_age(self):
            print('world')
    
    
    
    class car(bar): # 子类(派生类)
        def show_sex(self):
            print('male')

    实现不继承父代中的方法:

    代码示例:

    class bar:
        def show_name(self):
            print('hello')
        def show_age(self):
            print('world')
    
    
    
    class car(bar):
        def show_sex(self):
            print('male')
        def show_name(self):  # 在子代中定义一个和父代中相同名字的方法,就可以实现,方法重写
            print('female')
            

     执行父类中的已经被子类重写的方法:

      1.super(父类类名, 当前对象).方法名

      2.父类名.方法名(self)

    注意:

    1.self永远是执行该方法的调用者

    2.Python中支持多继承

    3.调用顺序

      1.如果有init方法,最先执行init方法  

      2.父类从左到右

      3.如果父类还有父类的话,就直接找到低,再找下一个父类

      4.如果,不同的父类,有相同的基类的时候,最后执行基类

      

    3.多态

      Python原生就是多态的

    类中的字段和方法:

    字段:

      普通字段:属于对象,只能通过对象来访问

      静态字段:属于类,并且在内存中只存在一份,不但能通过对象来访问,还能通过类来调用(可以修改)

    class bar:
    
        name = 'alex'
    
    bar.name = 'alvin' # 可修改
    print(bar.name)

    方法:

      普通方法:保存在类中,只能通过对象来调用

      

    class bar:    
        def func(self):  # 普通方法
            print('hello world')
    
    obj = bar()
    
    obj.func()

      静态方法:就是给普通的方法加上一个装饰器(staticmethod),这个方法就可以通过类直接调用,省去了创建对象的内存,还省略了self参数

    class bar:
    
        @staticmethod
        def func():  # 静态方法
            print('hello world')
    
    bar.func()    # 直接由类调用方法

      类方法:也是保存在类中,也是需要加上一个装饰器(classmethod),这个方法可以有self参数,但是默认不写成self而是写成cls,cal --->类名(Python自动传入这个参数)

    · 各种方法的使用场景:

      如果对象中需要保存一些值,执行某功能的时候,需要使用对象中的值,那么这时候我们就应该使用普通方法

      如果时对象中不是必须保存一些值,我们就可以使用静态方法,使用静态方法的好处就是可以节省创建对象的空间

    属性:

      他是一个方法,需要加装饰器(property)他的创建方式和普通的方法的创建方式是一样的,并且调用方法是和字段一样的,

    1.创建一个属性

    class bar:
    
        @property
        def fun(self):   # 这种方法叫做属性
            print('hello world')
            return 'sdkfj'
    
    
    obj = bar()
    
    print(obj.fun)

    2.修改属性的返回值

    再创建一个方法,加上装饰器(属性名.setter),修改属性的返回值,需要在方法中添加一个接受修改以后的返回值

    class bar:
        
        @property           # 属性
        def foo(self):
            return 1
        @foo.setter    # 对属性的返回值进行修改
        def foo(self, value):    # 需要有一个参数来接受,修改后的值
            print(value)
    
    obj = bar() # 创建对象
     
    obj.foo = 3  # 修改返回值

    3.删除属性的返回值

    再创建一个方法,加上装饰器(属性名.deleter), 删除属性的返回值

    class bar:
        @property
        def foo(self):
            print('hello world')
            return 3
        @foo.deleter
        def foo(self): # 创建一个新的方法,加上装饰器,可以删除之前的属性的返回值
            return 1
    
    obj = bar()
    
    del obj.foo    # 删除属性的返回值

     反射:

    作用: 通过字符串的方式,操作对象中的成员

    注意:类是一个对象,对象是一个对象,一个模块相对于函数也是一个对象,所以反射中的方法在类,模块中也都可以使用

      反射提供的方法:

      1.getattr(对象, 字符串类的成员)     利用字符串查看成员的值

      2.hasattr(对象, 字符串类的成员)   查看对象中是否有这个成员,返回布尔值

      3.setattr(对象, 成员名, 成员名的值)   在对象中创建新的成员

      4.delattr(对象, 字符串类的成员)          删除对象中的成员

    示例:

    class bar:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        # def func(self):
        #     print('hello world')
    
    
    
    obj = bar('alex', 34)
    
    
    while True:
        your_enter = input('your enter:')
    
        # result = getattr(obj, your_enter)  # getattr 的应用
    
        # result = hasattr(obj, your_enter)    # hasattr 的应用,判断后面的成员是否在前面的对象中,返回布尔值
    
        result = delattr(obj, your_enter)      # 利用delattr删除对象中的成员
        res = getattr(obj, your_enter)  # 这一段代码是判断是否正真的删除成员了
        print(res)
    View Code

     单例模式:

    单例模式的目的就是永远使用同一个实例(或者说是对象)

    示例:

    class bar:
        
        __v = None 
        
        @classmethod
        def only_type(cls): # 使用类方法
            if cls.__v :
                return cls.__v    # 永远都是这一个实例
            else:
                cls.__v = bar()   # 实例化过程,创建了一个对象
                return cls.__v
        def func(self):
            print('ksdfl')
            
            
    obj = bar.only_type() # 如果是需要使用单例模式,就这样进行实例化
  • 相关阅读:
    day 80 视图家族
    day 79 drf 多表关联操作
    day 78 drf 序列化
    day 77 drf中请求、渲染、解析、异常、响应模块的二次封装
    day 76 drf
    python小知识
    请求 渲染 解析 异常 响应模块
    子组件
    vue基础(2)
    vue基础
  • 原文地址:https://www.cnblogs.com/kangjunhao/p/9211236.html
Copyright © 2020-2023  润新知