Python的(class,self,init,str.)学习,含代码实例
Python的(class,self,init,str.)学习,含代码实例
今天开始学对象及面向对象的方法:关键字:class,self,init,str.
现实生活中,一切都是对象,如人类,动物,植物,哪怕是没有生命的汽车、电子产品,或者说抽象的天气等都是对象,而对象包含了静态特征和动态特征,静态如物品的颜色,形状,大小,动态如物品的转动,运动等。而我们今天要学的,对象的静态特征抽象成属性,也就是变量;把动态特征抽象成行为,也就是方法。
step1. 定义类
类是对象的蓝图和模板,有了类就可以创建对象
定义类需要做两件事情:数据抽象和行为抽象
数据抽象 - 抽取对象共同的静态特征(找名词) - 属性
行为抽象 - 抽取对象共同的动态特征(找动词) - 方法
定义类的关键字 - class- 类名(每个单词首字母大写)
class Student(object): # 定义类,每个单词首字母大写 def __init__(self,name='none',age=18): # 构造方法(构造器/构造子 - constructor) # 调用该方法的时候,不是使用方法的名字,而是使用类的名字 # 可以设默认值 # 给对象绑定属性 self._name = name # __name 加上一个下划线,可以保护该name,不允许再修改。 self._age = age # 我们定义一个方法就代表对象可以接收这个消息 # 对象的方法的第一个参数都是统一写成self # 它代表了接收消息的对象 - 对象.消息(参数) def study(self,course): print('%s正在学习%s' %(self._name, course)) def watch_av(self): if self._age >= 18: print('%s正在观看岛国爱情动作片!!' % self._name) else: print('%s,你才%s岁,我们推荐你去看《熊出没》!' % (self._name,self._age))
小结:这是第一步,定义类,把静态特征抽象出来,就学生而言,什么是静态特征呢,比如姓名,年龄;那么动态特征呢,比如学生可以看电视,学生可以学习,可以看书等等。看书是一个动作,看电视一个动作,可以分开来定义。框架都是一样,抓住静态特征与动态特征,仔细思考,应该都能写出自己想要的结果,只是能不能达到最后的效果,那就要仔细推敲,未达目的不罢休的精神去完成代码。
step2. 调用构造方法创建学生对象
实际调用的是Student类中的init方法
def main(): stu1 = Student('xl') # stu1.name = 'xl'
step 3.给对象发出消息
通过给对象发消息堂对象完成某些工作
解决任何问题都是通过让对象去做事情
stu1.study('Python程序设计') stu2 = Student('yqx') stu2.name = 'yc' stu2.study('HTML网页设计') stu2.watch_av() if __name__ == '__main__': main()
小结:这一部分就是完成学生的动作,通过给对象发送消息完成对应的某些工作,解决所有问题都是通过让对象去做事情完成的。
例:数字时钟
class Clock(object): def __init__(self,hour=0,minute=0,second=0): self._hour = hour self._minute = minute self._sencond = second def run(self): """走字""" time_n = [self._hour,self._minute,self._minute] self._sencond += 1 if self._sencond == 60: self._sencond = 0 self._minute += 1 if self._minute == 60: self._minute = 0 self._hour += 1 if self._hour == 24: self._hour = 0 # 下面的方法__str__(self)可以获得对象的字符串表达形式 # 当我们用print打印对象时会自动调用该方法 # def __str__(self): # return ('%02d:%02d:%02d' % (self._hour, self._minute, self._sencond)) def show(self): return ('%02d:%02d:%02d'%(self._hour,self._minute ,self._sencond )) def main(): clc = Clock(23,59,58) print(clc) print(id(clc)) while True: system('cls') print(clc.show()) time.sleep(1) clc.run() if __name__ == '__main__': main()
小结:数字时钟,对象就是小时,分钟,秒,让这些对象,进行变更来完成数字时钟,而方法就是秒表逢60进1,分钟逢60进1,小时逢24置零,完成数字时钟的制作。
例:围墙、泳池造价:
from math import pi # 我们定义一个类实际上是把数据和操作数据的函数绑定到一起 # 形成一个逻辑上的整体 这个整体就叫做对象 # 而且将来任何时候想使用这种对象时直接复用这个类型 class Circle(object): def __init__(self,radius=0): self._radius = radius def area(self): return pi * self._radius **2 def perimeter(self): return 2 * pi * self._radius def main(): r = float(input('圆的半径r=')) big = Circle(r + 3) small = Circle(r) print('围墙的造价为%.2f'%(big.perimeter()*25)) print('过道的造价为%.2f'%((big.area()-small.area())*32.5)) if __name__ == '__main__': main()
小结:这是之前的一道小问题,游泳池过道及围墙的造价。游泳池半径就是静态特征,是对象,而要得到相关的过道,围墙造价,就需要通过半径去计算得到,这是动态特征,就是方法。让对象通过方法去完成动作。