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. 查看修复HDFS中丢失的块

    检测缺失块 hdfs fsck -list-corruptfileblocks hdfs fsck / | egrep -v '^\.+$' | grep -v eplica 查看上面某一个文件的情况 ...

  2. 查看分析器(Analyzer)的分词效果

    1 测试代码 package com.test.lucene.helloworld; import org.apache.lucene.analysis.Analyzer; import org.ap ...

  3. lucene关于IndexReader总结

    IndexReader.使用过程中有时会出现document被删除,reader还是原来的reader没有改变,所以使用openifchanged保证, 又因为IndexReader 初始化很耗费资源 ...

  4. spring自定义标签之 规范定义XSD

    引言: spring的配置文件中,一切的标签都是spring定义好的.<bean/>等等,有了定义的规范,才能让用户填写的正常可用.想写自定义标签,但首先需要了解XML Schema De ...

  5. vuex 实现vue中多个组件之间数据同步以及数据共享。

    http://pan.baidu.com/s/1hrJfpli  demo下载地址 前言 在一些项目中有很多数据状态之间要实现数据共享状态共享,例如购物车的数据.用户的登录状态等等.vue父元素是可以 ...

  6. Java反射获取当前项目下所有类,支持Servlet

    反射在很多时候要用,尤其自己编写框架时,那么如何获得当前项目下所有类呢!以下是本人封装的一个比较简洁的方法: [功能代码] //通过loader加载所有类 private List<Class& ...

  7. C# 委托,事件, 异步

    委托 ​ 委托可以说是方法的集合,里面放着方法列表,当调用的时候就会调用全部的方法列表 ​ 个人理解 : 当声明和创建时委托时, 它是个 对象 当使用委托,调用方法时,它是个 方法 声明委托类型 de ...

  8. ssh和scp详解

    一.SSH客户端使用 使用ssh客户端远程登陆到指定的计算机: $ ssh {user}@{remote} -o IdentityFile=/home/id_rsa -o StrictHostKeyC ...

  9. NOIP2017:逛公园

    Sol 发现\(NOIP2017\)还没\(AK\)??? 赶紧改 考场上明明打出了\(DP\),没时间了,没判环,重点是没初始化数组,爆\(0\) \(TAT\) 先最短路,然后\(f[i][j]\ ...

  10. bzoj2119 股市的预测

    传送门 感觉智商莫名其妙的就变低了……写这题的时候死活想不出来…… 做法其实不难…… 题目要求形如ABA的串的个数,我们可以枚举A的长度,利用标记关键点的方法统计答案.设枚举到的答案为k,每k个点标记 ...