zoukankan      html  css  js  c++  java
  • python 面向对象(类)--学习笔记

    面向对象是一种编程方式, 主要集中在类和对象的两个概念

    • python 中的类符合封装, 继承, 多态的特征
    • 类 是一个模板, 是n多函数的集成
    • 对象 是类的实例化

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

      

    字段

    字段包括静态字段和普通字段,静态字段只在内存中保存一份, 普通字段在每个对象中都要保存一份(值可不同)

    • 普通字段属于对象, 实例化对象时普通字段存在于对象的内存中
    • 静态字段属于类, 实例化对象之后不存在与对象的内存中

    应用场景:如果类的多个对象需要使用相同的属性值则应定义为静态字段。

    class Animal:
        
        #静态字段
        name = '大象‘
    
        def __init__(self, name)
           #普通字段
            self.name = name
    # 访问普通字段
    obj = Animal('小猴子‘).name
    
    #访问静态字段
    Animal.name
    View Code

    方法

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

    • 普通方法:由对象调用;至少一个self参数;执行普通方法时将自动调用该方法的对象赋值给self
      •   调用过程  实例化对象-->对象调用类中的普通方法-->执行普通方法时,自动调用该方法的对象赋值给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()
    

    三种方法相同点:所有方法均属于类中(非对象),所以在内存中值保存一份

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

    属性

    属性其实是普通方法的变种

    • 定义时, 在普通方法的基础上添加@property装饰器
    • 定义时,属性仅有一个self参数(新式类可以有多个)
    • 调用时, 无需括号

          方法:foo_obj.func()

          属性:foo_obj.prop

    访问属性可以制造出和访问字段相同的假象, 属性由方法变种而来;属性的功能是在属性内部进行一系列逻辑运算,最终返回结果。

    属性由两种定义方式:装饰器、静态字段(在类中定义值为property对象的静态字段)

    本文作为学习笔记进行记录,学习大牛blog, 为大牛点赞, 更为详尽内容请移步一下链接

    http://www.cnblogs.com/wupeiqi/p/4766801.html

  • 相关阅读:
    阿里云ECS 网站访问变卡
    MySql导入导出sql脚本(转)
    Mysql数据库备份的问题:mysqldump: Got error: 1049: Unknown database 'blog;' when selecting the database(转)
    Mysql in 优化(转)
    根据查询更新JTable显示(转)
    MyEclipse部署项目到Tomcat上,但是classes文件夹下没有编译项目(转)
    POI Workbook workbook = WorkbookFactory.create(fis); 报NoSuchMethodError
    07-常用内置对象
    06-流程控制
    05-数据类型转换
  • 原文地址:https://www.cnblogs.com/brownz/p/8671726.html
Copyright © 2011-2022 走看看