1.Python面向对象编程OOP(Object Oriented Programming)

封装:可以隐藏实现细节,使代码模块化

继承:可以扩展已存在的代码模块,可以使代码实现重用

多态:一种接口,多种实现,实现接口重用,为了类在继承和派生的时候,保证家谱中任一类的实例的某一属性的正确调用。

python不支持多态,但可以间接实现。

# 新式类与经典类的差别主要在多继承的顺序问题
# class People: #经典类的写法
class People(object): # 新式类的写法
cn="中国"#类变量,大家公共的属性,节省内存开销
def __init__(self,name,age):#构造函数,在实例化时做一些类的初始化的工作
self.name=name#实例变量(静态变量),作用域就是实例本身
self.age=age
self.lover=[] def eat(self):#类的方法,功能(动态属性)
print("%s is eating......"%self.name) def sleep(self):
print("%s is sleeping.... "%self.name) def __del__(self):#析构函数:在实例释放、销毁的时候自动执行,通常用于做一些收尾的工作,如关闭一些数据库连接,打开的临时文件
print("deleting %s"%self.name) class Animal(object):
def walk(self):
print('%s is able to walk.'%self.name)
def make_love(self,obj):
print('%s is making love with %s'%(self.name,obj.name))
self.lover.append(obj) # python中可以实现多继承,先后继承的还是有顺序的
class Man(People,Animal):
def __init__(self,name,age,property,education):#子类中重构父类的构造方法
# People.__init__(self,name,age,education)
super(Man,self).__init__(name,age)#这是新式类的写法,两种写法都可以的,下面这种更好,
self.property=property
self.__education=education#私有属性,定义时用__property样式,
print('%s一出生就拥有%d元'%(self.name,self.property)) # 定义一个显示教育信息的方法
def show_edu(self):
print("%s education :%s"%(self.name,self.__education)) def runfast(self):#在子类中添加新的方法
print("%s is running fast...."%self.name)
def sleep(self):
People.sleep(self)#执行父类的方法
print("Man is sleeping,,,,,")#添加新的功能 class Woman(People,Animal):
def born(self):
print("%s is borning a baby,,,,"%self.name) m1=Man("Jack",22,10000,"大学本科")
#print(m1.__education)#会报错,私有属性不能这么访问,
m1.show_edu()#通过函数进行访问
m1.sleep() w1=Woman("Rose",18)
w1.sleep()
m1.make_love(w1)
w1.name='Roseenrr'
print('%s has lover : %s'%(m1.name,m1.lover[0].name))
w1.born()

面向对象

#python2.x中多继承:经典类按深度优先继承,新式类按广度优先继承的
#python3.x中多继承:都统一采用的广度优先继承
#多继承实例,B,C继承A,D继承B、C
class A(object):
# pass
def __init__(self):
print("A")
class B(A):
# pass
def __init__(self):
print('B')
class C(A):
# pass
def __init__(self):
print("C")
class D(B,C):
# pass
def __init__(self):
print("D") d1=D()#构造函数__init__()只构造一次,搜索顺序:D自身-->B--->C--->A

多继承

class School(object):
def __init__(self,name,addr):
self.name=name
self.addr=addr
self.students=[]
self.teachers=[] def enroll(self,stu_obj):
print("正在为学员%s办理入学注册手续"%stu_obj.name)
self.students.append(stu_obj) def hire(self,staff_obj):
print("雇佣新的教职工:%s"%staff_obj.name)
self.teachers.append(staff_obj) class SchoolMember(object):
def __init__(self,name,age,sex,):
self.name=name
self.age=age
self.sex=sex
def tell(self):
pass class Teacher(SchoolMember):
def __init__(self,name,age,sex,salary,course):
super(Teacher,self).__init__(name,age,sex)
self.salary=salary
self.course=course
def tell(self):
print('''-----info of Teacher:%s---------
Name:%s
Age:%s
Sex:%s
Salary:%s
Course:%s
'''%(self.name,self.name,self.age,self.sex,self.salary,self.course))
def teach(self):
print("%s is teaching course:%s"%(self.name,self.course)) class Student(SchoolMember):
def __init__(self,name,age,sex,stu_id,grade):
super(Student,self).__init__(name,age,sex)
self.stu_id=stu_id
self.grade=grade
def tell(self):
print('''-----info of Student:%s---------
Name:%s
Age:%s
Sex:%s
Stu_id:%s
Grade:%s
'''%(self.name,self.name,self.age,self.sex,self.stu_id,self.grade))
def pay_tuition(self,amount):
print('%s 缴费了 %s元'%(self.name,amount))
# 对象实例化
school=School("SMU","Shanghai") teacher1=Teacher("Jackson",48,'M',15000,"C语言")
teacher2=Teacher("Jack",55,'M',18000,"python语言编程") s1=Student("Jean",22,'M',2017001,"2班")
s2=Student("Alice",18,'F',2017002,"1班") s1.tell()
s2.tell()
school.hire(teacher1)
school.hire(teacher2)
school.enroll(s1)
school.enroll(s2)
print(school.students)
print(school.teachers) school.teachers[0].teach()
for stu in school.students:
stu.pay_tuition(5000)

View code

#多态的实例
class Animal(object):
def __init__(self,name):
self.name=name def howl(self):
pass
#实现多态的方法
@staticmethod
def animal_howl(obj):
obj.howl() class Cat(Animal):
def howl(self):
print("Meow,Meow...") class Dog(Animal):
def howl(self):
print("WOw,Wow,Wow")
c=Cat("Tom")
d=Dog("Wory") Animal.animal_howl(c)#同样的方法,传入不同的对象,执行不同的方法
Animal.animal_howl(d)

多态

第六周 day6 python学习笔记的更多相关文章

  1. 20145330第六周《Java学习笔记》

    20145330第六周<Java学习笔记> . 这周算是很忙碌的一周.因为第六周陆续很多实验都开始进行,开始要准备和预习的科目日渐增多,对Java分配的时间不知不觉就减少了,然而第十和十一 ...

  2. 第五周 day5 python学习笔记

    1.软件开发的常规目录结构 更加详细信息参考博客:http://www.cnblogs.com/alex3714/articles/5765046.html         2.python中的模块 ...

  3. 第三周 day3 python学习笔记

    1.字符串str类型,不支持修改. 2.关于集合的学习: (1)将列表转成集合set:集合(set)是无序的,集合中不会出现重复元素--互不相同 (2)集合的操作:交集,并集.差集.对称差集.父集.子 ...

  4. 第二周 day2 python学习笔记

    1. python中的三元运算: result=value1 if 条件 else value2 如果条件成立,result=value1 如果条件不成立,result=value2 2. pytho ...

  5. 第一周 day1 Python学习笔记

    为什么要学习Python? Python擅长的领域 1. python2.x中不支持中文编码,默认编码格式为ASCII码,而python3.x中支持Unicode编码,支持中文,变量名可以为中文,如: ...

  6. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  7. Python学习笔记(六)

    Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...

  8. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  9. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

随机推荐

  1. javaagent笔记及一个基于javassit的应用监控程序demo

    javaagent基本用法 定义入口premain public static void premain(String agentArgs, Instrumentation inst) { Syste ...

  2. 2、编写/修改权限及执行Shell程序的步骤

    学习目标编写Shell程序执行Shell程序 正文Shell程序有很多类似C语言和其他程序设计语言的特征,但是又没有程序语言那样复杂.Shell程序是指放在一个文件中的一系列Linux命令和实用程序. ...

  3. MySQL按照月进行统计

    MySQL按照月进行统计 今天需要后台提供一个按月统计的API.所以查了一下SQL语句的实现方法. 按月统计SQL select date_format(createtime, '%Y-%m') as ...

  4. MySql的用户权限

    用户管理 MySQL数据库中的表与其他任何关系表没有区别,都可以通过典型的SQL命令修改其结构和数据.可以使用GRANT和REVOKE命令.通过这些命令,可以创建和禁用用户,可以在线授予和撤回用户访问 ...

  5. golang基础--Array数组

    基本特性 格式: var Name [n]<type>,n>0 如: var a [10]int 表示,定义一个长度为10,元素类型为int性的数组 数组长度: 长度(len)也是数 ...

  6. pyquery库简介

    html = '''<div><ul><li class="item-0">li0</li><li class="i ...

  7. 记一次数据、逻辑、视图分离的原生JS项目实践

    一切的开始源于这篇文章:一句话理解Vue核心内容. 在文章中,作者给出了这样一个思考: 假设现在有一个这样的需求,有一张图片,在被点击时,可以记录下被点击的次数. 这看起来很简单吧, 按照上面提到到开 ...

  8. 8、导航:Nav

    1.导航视图   angular2 中的是视图是显示在<router-outlet></router-outlet>里的同时他要依赖于 directives:[ ROUTER_ ...

  9. SpringCloud实战之初级入门(二)— 服务注册与服务调用

    目录 1.环境介绍 2.服务提供 2.1 创建工程 2.2 修改配置文件 2.3 修改启动文件 2.5 亲测注意事项 3.服务调用 3.1 创建工程 3.2 修改配置文件 3.3 修改启动文件 3.4 ...

  10. SQL2008使用with求余额表,流水账方式

    1.先准备数据,将要求余额的表数据插入临时表 SELECT Serial, VoucherNum, SubjectNum, SubjectName, Direction, Amount INTO #T ...