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

原文地址:https://www.cnblogs.com/brownz/p/8671726.html