面向对象编程

  面向对象编程是一种程序设计思想,它把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数

  面向过程的程序设计把计算机程序视为一系列命令的集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数来降低系统的复杂度

  而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递

类和实例

  类是抽象的模板,而实例是根据类创建出来的一个个具体的“对象”

#定义类
#类体代码在类的定义阶段就会立刻执行
class Student: #class后面紧接着是类名,类名通常是大写开头的单词
school='oldgirl' def learn(self):
print('is learning') def choose_course(self):
print('choose course') print('===run')
#查看属性
print(Student.__dict__) #查看类的名称空间
print(Student.school) #访问类的数据属性,等同于Student.__dic__['school']
print(Student.learn) #访问类的函数属性
#增加属性
Student.country='China' #等同于Student.__dic__['country']='China'
print(Student.country)
#修改属性
print(Student.school='Oldgirl')
#删除属性
del Student.country
class Student:
school='oldgirl'
#__init__方法是在产生对象后才会执行,只用来为对象进行初始化操作,把name,age等属性绑上去,且不能有返回值
def __init__(self,name,age):
self.name=name
self.age=age def learn(self):
print('is learning') def choose_course(self):
print('choose course') #调用类即实例化(首先得到一个返回值即对象,该对象是一个空对象stu1;
#其次执行Student__init__(stu1,'lary',18))
stu1=Student('lary',18) #stu1.name='lary',stu1.age=18
print(stu1.name,stu1.age)

属性查找与绑定方法

  查找对象的属性顺序是:对象自己的__dict__,再找类的__dict__

  类的数据属性是所有对象共享,类的函数属性是绑定给对象用的

class Student:
school='oldgirl'
def __init__(self,name,age):
self.name=name
self.age=age def learn(self):
print('%s is learning'%self.name) def choose_course(self):
print('choose course') stu1=Student('lary',18)
stu2=Student('egon',20)
#类的数据属性是所有对象共享的
print(id(stu1.school),id(stu2.school))
#类的函数属性是绑定给对象用的
print(stu1.learn,stu2.learn)
#<bound method Student.learn of <__main__.Student object at 0x0532F1D0>>
#绑定类中定义的函数是绑定给对象用的,不同的对象就是不同的绑定方法
#绑定给谁,就由谁来调用,谁调用,就将该对象当作第一个参数传给方法,即自动传值
stu1.learn() #stu1.learn=Student.learn(stu1)
Student.learn(stu1) #类调用自身的方法需给位置参数传值
#绑定到对象的方法这种自动传值的特征,决定了在类中定义的函数都要写一个默认参数(习惯用self,其他名字也可以)

类即类型

  python中一切皆对象,且python3中类与类型是一个概念,类即类型

#类即类型
class Teacher: school='oldboy'
count=0 def __init__(self,name,age,sex):
self.Name=name
self.Age=age
self.Sex=sex
Teacher.count+=1 def teach(self):
print('%s teaching'%self.Name) def course(self):
print('%s teach course'%self.Name) teacher1=Teacher('egon',18,'male')
print(type(teacher1)) p=[1,2,3,4] #p=list([1,2,3,4])
print(type(p))
p.append(5) #list.append(p,5)
print(p)

isinstance 和issubclass

#isinstance(obj,cls)检查是否obj是否是类 cls 的对象
class Foo(object):
pass obj = Foo()
print(isinstance(obj,Foo))
#issubclass(sub, super)检查sub类是否是 super 类的派生类
class Foo(object):
pass class Bar(Foo):
pass print(issubclass(Bar,Foo))

最新文章

  1. 旅图beta版 asp.net web api 单元测试
  2. MySQL数据库指定字符集
  3. WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发
  4. HDU 4288 Coder 【线段树+离线处理+离散化】
  5. outline属性
  6. [转载]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)
  7. HDU 2686 Matrix 多线程dp
  8. DirectSound---简易Wav播放器
  9. python之常用模块一(time、random、os、sys)
  10. C++实现递归版二分搜索算法
  11. SpringCloud第六步:搭建分布式配置中心
  12. vue中element-ui树形控件自定义节点,注意一下
  13. Spring Boot应用的后台运行配置(转载)
  14. Android学习之基础知识十—内容提供器(Content Provider)
  15. python面向对象编程练习
  16. InnoDB 存储引擎的主要知识点介绍
  17. 【Python】keras卷积神经网络识别mnist
  18. Spring Cloud环境搭建: Eureka Server
  19. android环境安装及配置
  20. Zookeeper 源码(六)Leader-Follower-Observer

热门文章

  1. 三大Flex布局用法(转载)
  2. BZOJ 1264: [AHOI2006]基因匹配Match DP_树状数组_LCS转LIS
  3. jmeter的组成
  4. Python笔记23------Python统计列表中的重复项出现的次数的方法
  5. 【BZOJ2733】【HNOI2012】永无乡 - 线段树合并
  6. 【模板】 最大流模板(ISAP)
  7. 《你又怎么了我错了行了吧》【Alpha】Scrum meeting 3
  8. LoadRunner性能测试-下载文件脚本
  9. POSIX 线程编程(二)线程建立与终止
  10. 【Android 应用开发】 ActionBar 样式具体解释 -- 样式 主题 简单介绍 Actionbar 的 icon logo 标题 菜单样式改动