一、类的结构
1.使用面向对象开发,第一步是设计类
2.使用 类名() 创建对象,创建的动作有两步
- 在内存中为对象分配空间
- 调用初始化方法__init__为对象初始化
3.对象创建后,内存中就有一个对象的实实在在的存在
因此:
- 创建出来的对象叫做类的实例
- 创建对象的动作叫做实例化
- 对象的属性叫做实例属性
- 对象调用的方法叫做实例方法
在程序执行时:
- 对象各自拥有自己的实例属性
- 调用对象的方法,可以通过self,访问自己的属性,调用自己的方法
由此得出结论:
- 每个对象都有自己独立的内存空间,保存各自不同的属性
- 多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法内部
二、类属性和类方法
1、类属性
在Python中一切皆对象,类也是一个对象--->类对象,在程序运行中,类对象在内存中只有一份,通过它可以创建出很多个对象实例,除了封装实例和属性的方法外,类对象还可以拥有自己的属性和方法:类属性和类方法
通过 类名. 的方式可以直接访问类的属性
类属性其实就是 给类对象定义类的属性,通常用来记录与这个类相关的特征
class Tool(object):
#1.使用赋值语句定义类属性,记录所有工具的数量
count = 0
def __init__(self,name):
self.name = name
#让类属性的值+1
Tool.count+=1
#创建工具对象(对象在创建的时候,会自动调用初始化方法)
tool1 = Tool('斧头')
tool2 = Tool('榔头')
#输出工具对象的总数
#使用类名.属性名 来获取
print Tool.count
2、类方法
类属性就是针对类对象定义的,使用赋值语句在class关键字下可以定义属性,类属性用于记录于这个类相关的特性
类方法就是针对类对象定义的方法,在类方法内部就可以直接访问类属性或调用其他类方法
class Toy(object):
# 使用赋值语句定义类属性,记录所有玩具的数量
count = 0
@classmethod
def show_toy_count(cls):
# cls.count 在类方法内部,访问当前的类属性
print '玩具对象的数量 %d' % cls.count
def __init__(self, name):
self.name = name
# 让类属性+1
Toy.count += 1
#创建玩具对象
toy1 = Toy('乐高')
toy2 = Toy('玩具熊')
#调用类方法
Toy.show_toy_count()
三、静态方法
在开发中,如果需要在类中封装一个方法,这个方法既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法,这个时候,我们就可以把这个方法封装成一个静态方法
class Cat(object):
# 不访问实例属性/类属性
@staticmethod
def call():
print '喵喵~'
# 通过 类名. 调用静态方法
Cat.call()
# 不需要创建对象,直接就可以使用