类和对象(实例)
之前我们学习了函数和模块等组织代码的方式,但随着代码的增多,函数和模块还是不够用。
根据有项研究,如果代码超过 10000 行,如果只用函数和模块来组织代码,那么程序员将很难掌控代码。
所以在大型项目中,为了更好地组织代码,会使用类和对象。
类和对象之间的关系非常相似于概念和实体的关系。
创建类
class Cat(object): # 定义概念 猫: PS: 注意使用 class 关键词,Python 3 中不需要"(object)"
leg_cnt = 4 # 腿数 = 4 PS: 可以做为类属性
def __init__(self, cat_name): # 定义 创建过程(实体,猫名): PS: 实例的创建过程,类的实例化,第一个参数 self 是必须的,
# self 可以理解为类实例化时的已经存在的初始实体对象,很多属性还没有被设置
self.name = cat_name # 实体.名字 = 猫名 PS: 给实体设置 name 属性,同时将传入的参数 cat_name 赋值给它
# name 这个变量是附属于 self 实例的(self.name),不能够直接使用 name 变量
def change_name(self, cat_name): # 定义 改名字(实体,猫名): PS: 类里面的函数就叫类的方法,第一个参数是 self,类的方法实际上定义类这个概念能做什么
self.name = cat_name # 实体.名字 = 猫名
def climb(self): # 定义 爬树(实体):
print("cat %s climb a tree" % # 输出 (猫爬了树)
self.name)
创建并使用实例
tom = Cat("Tom") # 类的实例化,Cat 实例化后赋值给 tom 这个变量,tom 是一只真正的猫,它的名字叫"Tom"
tom.chang_name("ATom") # tom 改名字为 "ATom"
tom.climb() # tom 去爬树
tom.leg_cnt == 4 # True tom 的腿数是 4
类的继承
继承的类叫做子类。
class PersianCat(Cat): # 定义概念 波斯猫(继承猫):
def __init(self, cat_name): # 定义 创建过程(实体,猫名):
super(PersianCat, self).__init__(cat_name) # 执行猫的创建过程(猫名),Python 3 中"PersianCat, self"可不写
def jump(self): # 定义 跳(实体):
print("try jump") # 打印 ("try jump")
jack = PersianCat("jack") # jack 是一只真实的波斯猫
jack.jump() # jack 跳
jack.climb() # jack 爬树