1. 面向对象编程
1.1 简介
面向对象的三个特性:封装、多态、继承。
私有方法、私有属性
类变量、实例变量
面向过程编程:告诉计算机一步一步的要做什么。
面向对象编程的简单演示:
#定义一个类
class Dog:
def __init__(self,name): #构造函数,在实例化时做一些类的初始化工作。
self.name = name
#定义属性
def bulk(self):
print("%s:汪汪汪" % self.name)
d1 = Dog("陈")
d2 = Dog("王")
d3 = Dog("张")
d4 = Dog("李")
d1.bulk()
d2.bulk()
d3.bulk()
d4.bulk()
执行结果:
C:\Users\liuxiaotao\AppData\Local\Programs\Python\Python35-32\python.exe
C:/Users/liuxiaotao/Desktop/Python/code/day07/object_dog.py
陈:汪汪汪
王:汪汪汪
张:汪汪汪
李:汪汪汪
把一个类编程具体对象的过程,叫做实例化。
1.2 析构函数
在实例释放、销毁的时候自动执行的函数,通常做一些收尾工作,如关闭数据库连接等。如果需要关闭,可以手动del删除对象。
class people(object):
def __init__(self,name,age,country="china"):
self.name = name
self.age = age
self.country = country
def eat(self):
print("%s is eatting" % self.name)
def __del__(self):
print("%s is dead" % self.name)
def sleepping(self):
print("%s is sleepping" % self.name)
备注:该模块执行结束后,会自动执行析构函数,这里是打印一句话。
1.3 私有属性和私有方法
class people(object):
def __init__(self,name,age,country="china"):
self._name = name
#私有属性
self.age = age
self.country = country
def _eat(self):
#私有方法
print("%s is eatting" % self.name)
def __del__(self):
print("%s is dead" % self.name)
def _sleepping(self):
print("%s is sleepping" % self.name)
私有属性和私有方法只能在当前实例中进行调用,该模块以外的实例无法调用。
1.4 继承
# _*_ coding:utf-8 _*_
# Author :kaige
class people:#(经典类写法)
class people(object):(新式类写法)
def __init__(self,name,age,country="china"):
self.name =
name
self.age =
age
self.country
= country
def eat(self):
print("%s is eatting" % self.name)
def __del__(self):
print("%s is dead" % self.name)
def sleepping(self):
print("%s is sleepping" % self.name)
class men(people):
def piao(self):
#子类自己定义的方法
print("piaoing.......done")
m1 = men("kaige",22)
m1.eat()
#继承父类的方法
m1.piao()
#子类自己的方法
class people:
def __init__(self,name,age,country="china"):
self.name = name
self.age = age
self.country = country
def eat(self):
print("%s is eatting" % self.name)
#def
__del__(self):
#print("%s is dead" %
self.name)
def sleepping(self):
print("%s is sleepping" % self.name)
class men(people):
def piao(self):
print("piaoing.......done")
class women(people):
def __init__(self,name,age,money):
#给某个类单独添加属性
people.__init__(self,name,age,country="china")
super(women,self).__init__(name,age,country="china")#第二种方法
self.money = money
def brun(self):
print("%s brunning......wiht %s done" % (self.name,self.money))
m1 = men("kaige",22)
wo2 = women("xiaoqing",26,2000)
m1.eat()
m1.piao()
print("%s come from %s" % (m1.name,m1.country))
wo2.brun()
1.5 多继承的优先原则
新式类和经典类的区别在于多继承的顺序问题。
继承原则有广度优先和深度优先两种原则:
?
python3中都是广度优先
?
python2中经典类是深度优先原则,新式类是广度优先原则
以上演示因为是python3,遵循广度有限的原则:
1.6 多态
多态特性:一种接口,多种实现