zoukankan      html  css  js  c++  java
  • python(24)- 面向对象进阶

    面向对象基础知识:

    1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用;

    2.类是一个模板,模板中包装了多个‘函数’供使用(可以将多函数中公用的变量封装到对象中);

    3.对象,根据模板创建的实例(即:对象),实例用于被包装在类中的函数;

    4.面向对象三大特性:封装、继承和多态。

    面向对象进阶篇详细介绍python类的成员、成员修饰符和类的特殊成员。

    类的成员

    类的成员可以分为三大类:字段、方法和属性

    注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少普通字段。而其他的成员,则都保存在类中,即:无论对象的多少,在内存中只创建一份。

    一、字段

    字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同

    普通字段属于对象

    静态字段属于类

    #字段的定义和使用
    class Province:
    
        # 静态字段
        country = '中国'
    
        def __init__(self, name):
    
            # 普通字段
            self.name = name
    
    
    # 直接访问普通字段
    obj = Province('河北省')
    print(obj.name)
    
    # 直接访问静态字段
    Province.country
    

    由上述代码可以看出普通字段需要通过对象来访问,静态字段通过类访问,在使用上可以看出普通字段和静态字段的归属是不同的。其在内容的存储方式类似如下图:

    由上图可知:静态字段在内存中只保存一份

          普通字段在每个对象中都要保存一份

    应用场景:通过类创建对象时,如果每个对象都具有相同的字段,那么就使用静态字段。

    二、方法

    方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

    普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;

    类方法:由类调用;至少一个cls参数;执行类方法时,自动将调用该方法的类赋值给cls;

    静态方法:由类调用;无默认参数;

    #方法的定义和使用
    class Foo:
    
        def __init__(self, name):
            self.name = name
    
        def ord_func(self):
            """ 定义普通方法,至少有一个self参数 """
    
            # print self.name
            print('普通方法')
    
        @classmethod
        def class_func(cls):
            """ 定义类方法,至少有一个cls参数 """
    
            print('类方法')
    
        @staticmethod
        def static_func():
            """ 定义静态方法 ,无默认参数"""
    
            print('静态方法')
    
    
    # 调用普通方法
    f = Foo()
    f.ord_func()
    
    # 调用类方法
    Foo.class_func()
    
    # 调用静态方法
    Foo.static_func()
    

    相同点:对于所有的方法而言,均属于类(非对象)中,所以,在内存中也只保存一份。

    不同点:方法调用者不同、调用方法时自动传入的参数不同。

    三、属性

    python中的属性其实就是类中方法的普通方法的变种。

    1.属性的基本使用

    #属性的定义和使用
    # ############### 定义 ###############
    class Foo:
    
        def func(self):
            pass
    
        # 定义属性
        @property
        def prop(self):
            pass
    # ############### 调用 ###############
    foo_obj = Foo()
    
    foo_obj.func()
    foo_obj.prop   #调用属性
    

    属性的定义和调用注意点:

    1.定义时,在普通方法的基础上添加@property装饰器;

    2.定义时,属性仅有一个self参数;

    3.调用时,无需括号

      方法:foo_obj.func()

      属性:foo_obj.prop

    注意:属性存在意思是:访问属性时可以制造出和访问字段完全相同的假象。

       属性由方法变种而来,如果python中没有属性,方法完全可以代替其功能。

    实例:对于主机列表页面,每次请求不可能把数据库中的所有内容都显示到页面上,而通过分页的功能局部显示,所以在向数据库中请求数据时就要显示的指定获取从第m条到第n条的所有数据(即:limit m,n),这个分页功能包括:

    1.根据用户请求的当前页和总数据条数计算出m和n

    2.根据m和n去数据库中请求数据

  • 相关阅读:
    CSS练习
    关于进度模型和进度计划
    信息管理系统/记录管理系统/配置管理系统
    分析技术在PMP中的应用
    渐进明细的几个点
    android手机内的通讯录数据库
    用FileExplorer查看android手机中的数据库
    VCard介绍
    org.apache.http.client.methods.HttpGet 转到定义找不到源代码
    Android : Your APK does not seem to be designed for tablets.
  • 原文地址:https://www.cnblogs.com/xuyaping/p/6718993.html
Copyright © 2011-2022 走看看