• 类的进阶


    类的三大特性

    1,封装

    2,继承

    3,多态

    为什么需要类!

    运用“类”和“对象”的编程方法,叫做OOP(面向对象)

    为什么要OOP!

    开发的基本原则:

    1,避免重复代码的调用

    2,代码易读性,扩展性

    “类”的成员:

    字段

     普通字段

     静态字段

    方法

     普通方法

     类方法

     静态方法

    属性

     普通属性

    一、字段

    普通字段与静态字段的区别:

     静态字段属于“类”

     普通字段属于“对象”

    代码中的体现:

    class Province:
    
        country = "China"
    
        def __init__(self,name):
    
            self.name = name
    
     
    
    p1 = Province("JiangSu")
    
    p2 = Province("HeBei")
    
     
    
    print(p1.name,p1.country)
    
    print(p2.name,p2.country)

    如果一个字段是所有对象共享的,那么这个字段建议用静态字段,

    why?

     内存消耗的问题,

    静态字段保存在类中,n个对象共享一个内存地址

    普通字段保存在对象中,一个对象就需要占用一个内存字段

    二,方法

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

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

    静态方法:由“类”调用,无默认参数

    这三种方法在内存中都属于类!

    代码:

    class Foo:
    
        def __init__(self,name):
    
            self.name = name
    
        def ord_func(self):
    
            '''定义普通方法,所以必须要self参数'''
    
            print("普通方法")
    
        @classmethod
    
        def class_func(cls):
    
            '''定义类方法,至少有一个cls参数'''
    
            print("类方法")
    
        @staticmethod
    
        def static_func():
    
            '''定义静态方法,无默认参数'''
    
            print("静态方法")
    
    #生成对象
    
    f = Foo('abc')
    
    #调用普通方法
    
    f.ord_func()
    
    #调用类方法
    
    Foo.class_func()
    
    #调用静态方法
    
    Foo.static_func()

    三,属性

    属性其实就是“普通方法”的变种!

    属性的基本使用:

    class Goods:
    
        @property
    
        def price(self):
    
            print ("alben")
    
     
    
    obj = Goods()
    
    调用属性
    
    result = obj.price
    
     

    属性的定义与调度注意点:

    1,在普通方法的基础上,添加装饰器@property

    2,定义时只需要一个“self”参数

    3,调用时不需要括号“()”

    例:

     数据库中保存了大量主机列表,在读取的时候一般都是分页读取的,每一页显示条目数量固定,这样就需要给定每次读取是从第几条开始,第几条结束。

    class Page:
    
        def __init__(self,current_page):
    
            self.current_page = current_page
    
            self.items = 10
    
     
    
        @property
    
        def start(self):
    
            value = (self.current_page - 1) * self.items
    
            return value
    
     
    
     
    
        @property
    
        def end(self):
    
            value = self.current_page * self.items
    
            return value
    
     
    
    p1 = Page(10)
    
     
    
    p1.start
    
    p2.start
  • 相关阅读:
    Echarts、大屏动态折线图无状态加载
    地图获取城市编码vue-jsonp请求,处理跨域
    将数组中的元素拼接为一个字符串
    vue兄弟组件通信、兄弟组件传值(本人是用的是中央控件作为媒介),并一同解决重负传值、第一未传值
    vue、react动态新增行
    vue-antd 分页pagination相关重置问题
    关闭ESLint警告,本人使用的是vue-antd-pro
    文本长短不一文本长短不一致,css让其左右两侧对齐致,css让其左右两侧对齐
    Maven私服搭建 Nexus
    Maven常用命令
  • 原文地址:https://www.cnblogs.com/alben-cisco/p/6939267.html
Copyright © 2020-2023  润新知