面向对象编程
一:面向对象的理解
1. 什么是面向对象
面向对象编程 :简称OOP,是一种程序设计思想。,它不同于面向过程的一步一步去处理一个问题,而是基于万物皆对象这个哲学观点. 所谓的面向对象就是将我们的程序模块化,对象化,把具体事物的特性属性和通过这些属性来实现一些动作的具体方法放到一个类里面。
其实面向对象也很简单,却也很难。孰能生巧,你需要去适应面向对象这种编程思想,刚开始接触类的时候感觉它和函数挺像的,都是用来进行 封装,方便重复利用。不过类还有 继承和 多态等属性,使用上更加灵活。
2.面向对象的三要素
2.1: 封装
封装顾名思义就是将内容封装起来,然后通过调用去获得信息。
对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,它可以隐藏数据,对外只暴露一些接口,通过接口去访问对象。
2.2: 继承
将公共的方法放在父类中,子类只需要关注自己特有的方法,多继承少修改可以提高代码的扩展性。
2.3:多态
多态就是一个对象在不同的情况下具有不同的状态。是使用继承和接口实现的。
在Python中有两种说法:
一种是Python支持多态,Python是弱语言,一个变量名可以存储不同的类型。可以理解为多种形态。
一种是Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型。它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。
二:类的创建
1.普通类
class定义类:
1.必须使用class关键字
2.类名必须用大驼峰命名
3.类定义完成后,就产生了一个类的对象,绑定到了标识符ClassName上
class MyClass(object):
def foo (self,name): #类属性foo, 也是方法
return (name)
myc = MyClass()
print(myc,type(myc))
我们创建了一个名为MyClass的类,并实例化了这个类,得到其对象myc.
上边的foo 是方法对象method,不是普通的函数对象function,它一般要求至少要有一个参数,第一个参数可以是self(self只是一个形参,惯用2名称,可以更换),这个参数就留给对象自己,实例本身。
下面创建了一个统计车辆信息的类,可以体验一下类的创建和实例化。
class Car(object):
def __init__(self):
self.cars = {
}
self.i=0
def addcar(self,mark,color,price):
self.cars[self.i]={
"mark":mark,"color":color,"price":price}
self.i+=1
def showcar(self):
for k,v in self.cars.items():
print ("{} 车牌号:{},颜色:{},价格:{}".format(k+1,v["mark"],v["color"],v["price"]))
car = Car()
car.addcar(12345,"yello",100)
car.addcar(67895,"yello",200)
car.showcar()
2.元类:
元类是类的类,是类的模板
元类是用来控制如何创建类的,正如类是创建对象的模板一样,而元类的主要目的是为了控制类的创建行为
type()
动态创建类
通过type(name,bases,dict)就可以创建出一个类,其中
- name:相当于class name中name的一个标识,是一个类名的一个标识
- bases:相当于class name (A,B)中的类继承与谁,如此时类继承于A和B这两个类 ,根据继承情况可以为空。
- dict:相当于类属性,如类的方法和属性 (属