一、类与对象
我们已经认识了两个重要的新概念:类和实例,也知道它们之间的关系类似于:群体和个体。群体里的每个个体都有着相同/相似的特征和行为。
万事万物,皆为对象
二、类的创建和调用
类中创建的属性和方法可以被其所有的实例调用,而且,实例的数目在理论上是无限的。
三、创建类的两个关键点
1、特殊参数:self
self代表的是类的实例本身,方便数据的流转。
第一点:只要在类中用def创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)。
第二点:当在类的方法内部想调用类属性或其他方法时,就要采用self.属性名或self.方法名的格式。
2、特殊方法:初始化方法
定义初始化方法的格式是def __init__(self),是由init加左右两边的【双】下划线组成( initialize “初始化”的缩写)
除了设置固定常量,初始化方法同样可以接收其他参数,让传入的这些数据能作为属性在类的方法之间流转。
四、面向对象编程
import math
class Project:
def __init__(self):
self.key = 1
def input(self):
choice = input('请选择计算类型:(1-工时计算,2-人力计算)')
if choice == '1':
self.size = float(input('请输入项目大小:(1代表标准大小,请输入小数)'))
self.number = int(input('请输入人力数量:(请输入整数)'))
self.time = None
if choice == '2':
self.size = float(input('请输入项目大小:(1代表标准大小,请输入小数)'))
self.number = None
self.time = float(input('请输入工时数量:(请输入小数)'))
def estimated(self):
# 人力计算
if (self.number == None) and (self.time != None):
self.number = math.ceil(self.size * 80 / self.time)
print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(self.size,self.time,self.number))
# 工时计算
elif (self.number != None) and (self.time == None):
self.time = self.size * 80 / self.number
print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(self.size,self.number,self.time))
def again(self):
a = input('是否继续计算?继续请输入y,输入其他键将结束程序。')
if a != 'y':
# 如果用户不输入'y',则把key赋值为0
self.key = 0
# 主函数
def main(self):
print('欢迎使用工作量计算小程序!')
while self.key == 1:
self.input()
self.estimated()
self.again()
print('感谢使用工作量计算小程序!')
# 创建实例
project1 = Project()
project1.main()
用类编写一个直观的好处就是参数的传递会比普通函数要省事很多,也不必考虑全局变量和局部变量,因为类中的方法可以直接调用属性。