一.面向过程(POP)&面向对象(OOP)
理解面向过程,强调过程过程!以解决问题的过程为中心的编程方法。说到过程,我们联想到步骤,也就是说面向过程的编程注重对每一个步骤的处理,想到哪写到哪。当解决一个问题时,一步一步来,面面俱到,将代码分解为若干个过程或者函数。在我刚刚接触编程时学的C语言就是面向过程的。
对于面向对象,在编程时是有预谋的,有规划的。解决问题时,以功能来划分问题,把构成问题的事务分解成各个对象,对象一般由属性和方法构成。类就是用来描述具有相同的属性和方法的对象的集合。类定义了该集合中每个对象所共有的属性和方法,对象是类的实例。面向对象有封装,继承,多态性的特性。
对于上一篇求1~500的和,也可以用面向对象来解决。
class CalculateSum:
def total(self):
#self 实例对象
self=int(input())
odd_even=self%2
if odd_even==0:
s=(1+self)*(self//2)
else:
s=(1+self)*(self//2)+(1+self)/2
return s
number=CalculateSum()
#实例化 number为创建的CalculateSum类的对象
print(number.total())
#调用CalculateSum类中的方法total
二. self用法
self代表类的实例,而不是类。类的方法与普通的函数只有一个区别——它们必须有一个额外的第一个参数名称,按照惯例它的名称是self。self在定义类的方法时是必须有的,但是在调用时不必传入相应的参数。
在类中函数相互调用要加self,变为self.,self就是把class中定义的变量和函数变成实例变量和实例函数,作为类class的成员,使成员之间可以相互调用,不需从外部调用变量和函数。
class Test:
def prt(self):
print(self)
print(self.__class__)
#self.__class__指向类
t=Test()
t.prt()
三. init函数的用法
__init__()方法是一种特殊的方法,叫做类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。init用来初始化对象的特征,init这种构建方法,在创建对象时会自动调用,不需要单独调用该方法。
例:
class testClass:
def __init__(self,name):
self.name=name
print('name:',self.name)
n=testClass('gwq')
运行结果:
当没有init时:
想要输出:
class testClass:
def test(self,name):
self.name=name
print('name:',self.name)
n=testClass()
#定义对象
n.name='gwq'
#传参
n.test('gwq')
#调用
运行结果:
用了init就需要在定义对象的时候就赋值,而不用init的话,是不需要再定义对象的时候就赋值,需要单独传参,但是因为在test中定义了name,所以在调用的时候,也需要传一个参数,但如果不用init,在调用的时候传参,是没有任何意义的,因为类中的方法默认接受的参数是单独定义的参数,而不是是调用的时候传的参。
__init__是构造方法,在创建对象时会自动调用,而且构造方法(函数),不支持重载,如果需要给这个类定义参数,就需要用init,反则不需要用!
四. 成员函数的调用
类的属性调用前面加self.属性名就可以,self在类中就是testClass(),为了简洁,出现了self代替,当类中有两个函数时,下一个函数要调用上一个函数,只要在前面加一个self(实例)就可以实现调用。def创建方法时,第一个参数位置一定留给self,但在调用时忽略self(不用给self传参)。当在类的方法内部想调用类属性或其他方法时就要采用self.属性名或self.方法名的格式。
例:
class testClass:
def test(self):
print('gwq')
def introduce(self):
print('My name is ')
self.test()
#调用类中函数
n=testClass()
n.introduce()
运行结果: