面向对象是一种编程方式, 主要集中在类和对象的两个概念
- python 中的类符合封装, 继承, 多态的特征
- 类 是一个模板, 是n多函数的集成
- 对象 是类的实例化
类的成员分为三大类:字段、方法、属性
字段
字段包括静态字段和普通字段,静态字段只在内存中保存一份, 普通字段在每个对象中都要保存一份(值可不同)
- 普通字段属于对象, 实例化对象时普通字段存在于对象的内存中
- 静态字段属于类, 实例化对象之后不存在与对象的内存中
应用场景:如果类的多个对象需要使用相同的属性值则应定义为静态字段。
class Animal: #静态字段 name = '大象‘ def __init__(self, name) #普通字段 self.name = name # 访问普通字段 obj = Animal('小猴子‘).name #访问静态字段 Animal.name
方法
方法: 普通方法, 静态方法, 类方法。三种方法在内存中都归属于类, 区别在于调用方式不同
- 普通方法:由对象调用;至少一个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