一、面向对象的介绍:
1.什么是面向对象:是一种解题思路,把世间万物都看待成一个一个的对象,
一个问题的解决,需要靠所有的对象完成它们自己的事情,
从而达到整件事情的成功
2.另一种解题思路:【面向过程编程】--->按照问题的递进关系,一步一步解决 ,直到得到问题真正的答案为止
3.代表语言:面向对象:Jave / JavaScript / c++ / Python
面向过程:C语言
二、面向对象编程的结构:
1.类:相当于就是一个工厂,或者可以理解为一个模板。
2. 对象:就是工厂生产出来的具体的东西,也就是根据模板制造出来的实例。
【注意:对象不会凭空产生,也就意味着必须先有类,再有对象】
3.类的构成:
在类中一般情况下我们需要描述将来对象具备的特征和行为
这里特征就称为对象的属性、行为就称为对象的方法
三、类的创建和对象(实例)的生成:
1.类的创建:
要用到class 关键字
例如:class 类名(object):
#将来对象的属性,要通过_ _init_ _()魔法函数(初始化函数)来进行表示
def _ _init_ _(self,n):
self.xx =n
#将来对象的方法,是通过函数的形式表示,函数中的第一个参数必须是self
【注意:类中出现的self均代表将来通过该类生成的对象,同时如果属性的值不固定,那么在初始化函数中要给与参数】
2.对象(实例)的生成:
对象名 = 类名(参数) ---->是否有参数,取决于类中初始化函数是否有参数
例如:
class A(object):
def __init__(self,age): # 初始化函数
self.name = "张三" # 对象(实例)的属性,诗是个固定值
self.age = age # 对象的属性,通过参数传递
def draw(self,num): # 对象的方法,可以接收参数
print("%s会画%d种画"%(self.name,num))
a = A(9) # 根据类生成对象,对象叫做 a
3.对象访问属性、调用方法
对象名.属性名
对象名.方法名()
例如:print(a.name)
a.draw(3)
四、私有属性、实例属性、类属性、私有方法、实例方法、类方法、静态方法
1.按照属性只能在类中使用和能在类外被调用,分为私有属性和共有属性(实例属性、类属性)
2.按照属性属于谁,分为实例属性和类属性
3.按照方法只能在类中使用和能在类外被调用,分为私有方法和共有方法(实例方法、类方法、静态方法)
4.按照方法属于谁,分为类方法和实例方法、静态方法
例如:
class People(object):
height = "1米8" # 类属性,可以在类外被访问
__fuse = "yellow" # 私有类属性,只能在类内部使用
def __init__(self,n,a):
self.name = n # 实例属性,可以在类外被访问
self.age = a
self.eyes = "black"
self.__weight = "50kg" # 私有实例属性,只能在类内部使用
def move(self): # 实例(对象)方法
print("%s的人类都会走路"%self.__weight)
@classmethod # 表示下方是类方法的装饰器
def waimao(cls): # 类方法
print("亚洲人都是%s肤色,希望咱们身高都是%s。"%(cls.__fuse,cls.height))
@staticmethod # 表示下方是静态方法的装饰器
def eat(): # 静态方法
print("人类都会吃饭")
p = People("张三",18)
# 对象的属性、方法只有对象自己能用、类的属性和方法,对象和类都能用
print(People.height) # 类访问类属性
print(p.height) # 对象访问类属性
print(p.name) # 对象访问实例属性
People.waimao() # 类访问类方法
People.eat() # 类访问静态方法
p.waimao() # 对象访问类方法
p.eat() # 对象访问静态方法
p.move() # 对象访问实例方法
五、继承:
什么是继承: 继承是面向对象语言具备的特征之一,只要是为了提高代码的复用率。
1.单继承:一个子类继承一个父类
继承的时候,只要在当前类的小括号中写入父类的名字即可,这样就可以继承父类的所有属性和方法了。
例如:class Parent(object):
def __init__(self,n):
self.name = n
def eat(self):
print("我喜欢吃东西")
class Son(Parent): # 单继承,Son这个子类只有一个父类Parent
pass # 虽然Son类中没有代码,但是它可以继承父类的name属性和eat()函数
s = Son("李四")
print(s.name) # 子类创建的对象s使用父类的name属性
s.eat() # 子类创建的对象s使用父类的eat方法
2.多继承:一个子类会继承多个父类(子类小括号中的父类顺序也会直接影响继承的结果)
例如:
class Master(object):
def __init__(self):
self.kongfu = "古法煎饼果子配方"
def make_cake(self):
print("按照%s制作煎饼果子"%self.kongfu)
class School(object):
def __init__(self):
self.kongfu = "现代煎饼果子配方"
def make_cake(self):
print("按照%s制作煎饼果子"%self.kongfu)
class Prentice(School,Master):
pass
damao = Prentice()
print(damao.kongfu)
damao.make_cake()
3.在继承的时候如果还想使用和父类同名的函数,可以使用super( )机制
例如:
class Master(object):
def make_cake(self):
print("按照古法制作煎饼果子")
class School(object):
def make_cake(self):
print("按照现代制作煎饼果子")
class Prentice(School,Master):
def make_cake(self):
super(Prentice,self).make_cake() # 这里super()函数就可以获取到Prentice的父类School中的make_cake()函数去执行
print("这是子类自己的make_cake方法")
damao = Prentice()
damao.make_cake()
4.多层继承:表示子类有多个父类,但是父类有可能还有多个父类。其中父类的父类或者父类的更高级别类统称为“超类”
在多层继承的时候,要注意继承的顺序,可以通过 子类._ _mro_ _ 的方式进行查看。
好了,这是这一系列的最后一篇了,后会有期。