一、面向过程与面向对象:
面向过程:
优点:将复杂问题流程化,进而简单化
缺点:可扩展性差
如果需要处理任务比较复杂,且不断更新和维护,则需要使用面向对象的方式
面向对象:对现实世界的模拟
特点:可以编写真是世界中的事物和情景类,并基于这类来创建对象
优点:使程序维护和扩展更加简单,大大提高程序开发效率
面向对象三大特征:封装、继承、多态
二、创建简单的类:
类:描述具有相同特征和行为的对象的集合
通过变量,刻画类的特征;通过方法,描述类的行为
对象:类实例化后,可生成一个或者多个对象
class 类名(): --大驼峰
变量 --刻画类的特征
def 相关方法名(self,相关参数): --描述类的行为
pass
举例:
class Man():
gender='male'
avg_height=1.7
def think(self): #实例化方法
print('thinking')
def sleep(self): #实例化方法
print('sleeping')
注意:类可以去定义,但不负责执行相关的方法
实例化方法:类实例化后的对象能够使用的方法
三、self与实例方法
1、类的实例化
man1=Man()
2、对self进行说明
self的名称是约定俗成的
self指向的是类实例化后的对象本身
self只有在类的方法中才会有,函数是不必带self的
self在定义类的方法(实例方法)时是必须的
self在调用时不必传入相应的参数
3、调用实例化方法:
man1.sleep()
man1.think()
四、__init__构造方法
引入:生成对象特征比较抽象,只有类的通俗特征(male 1.7)没有具体特征
使用构造函数可以让模板(类)生成不同特征的对象
举例:
class Man():
gender='male' # 类变量 描述类的通俗特征
avg_height=1.7
def __init__(self,name,age): #构造函数,可初始化对象特征,保存对象特征
self.name=name #实例变量 保存对象的具体特征
self.age=age
def think(self):
print('thinking')
def sleep(self): #实例化方法
print('sleeping')
man2=Man('小明',18)
man2.name
man2.age
man2.__dict__
五、通过实例方法访问实例变量与类变量
类变量 描述类的通俗特征,只与类有关 如:性别,平均身高
实例变量 刻画对象具体特征,只与实例化后的对象有关 如:姓名 年龄
访问类变量:
方式一:print(self.__class__.gender)
方式二:print(Man.gender)
方式三:print(self.gender)
访问实例变量:
man2.name
man2.age
man2.sleep(self)
man2.think(self)
六、类方法??
使用类方法操作与类相关的特征
如修改平局身高增加0.05
@classmethod #声明类方法
def modify_height(cls,height):
cls.avg_height+=height
print('success,now the avg_height is'+str(cls.avg_height))
七、静态方法
与普通方法没有什么区别
静态方法与类、对象没有太大关系时候,可以使用该方法
@staticmethod #声明静态方法
def plus_num(x,y):
return x*y
man2.plus_num(2,3)
八、成员可见性
pubic 公开性
private 私有
举例:
class Man():
gender='male' #类变量
avg_height=1.7
def __init__(self,name,age): #构造方法
self.name=name #实例变量
self.__age=age #私有变量
def think(self): #实例化方法
print('thinking')
def __sleep(self): #私有方法
print('sleeping')
@classmethod #类方法
def modify_height(cls,height):
cls.avg_height+=height
print('success,now the avg_height is'+str(cls.avg_height))
@staticmethod #静态方法
def plus_num(x,y):
return x*y
访问私有变量、私有方法
man3=Man('bob',8)
man3._Man__age
man3._Man__sleep()
九、继承/super关键字调用父类方法
通过继承,子类可以直接使用父类的功能,减少重复代码
举例:
class ChineseMan(Man): #ChineseMan子类继承Man父类
pass
通过继承,子类可以扩张父类的相关功能,增加代码灵活性
class ChineseMan(Man):
def __init__(self,name,age,weight):
self.weight=weight
super(ChineseMan,self).__init__(name,age)
def think(self):
super(ChineseMan,self).think()
print(self.name+'thinking')