面向对象编程

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

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

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

类和实例

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

#定义类
#类体代码在类的定义阶段就会立刻执行
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))

第九章 Python之面向对象的更多相关文章

  1. 第九章 Python文件操作

    前一阵子写类相关的内容,把老猿写得心都累了,本来准备继续介绍一些类相关的知识的,如闭包.装饰器.描述符.枚举类.异常等,现在实在不想继续,以后再开章节吧.本章弄点开胃的小菜提提神,介绍Python中文 ...

  2. python 教程 第九章、 类与面向对象

    第九章. 类与面向对象 1)    类 基本类/超类/父类被导出类或子类继承. Inheritance继承 Inheritance is based on attribute lookup in Py ...

  3. 《python for data analysis》第九章,数据聚合与分组运算

    # -*- coding:utf-8 -*-# <python for data analysis>第九章# 数据聚合与分组运算import pandas as pdimport nump ...

  4. 第九章、python文件的两种用途

    目录 第九章.python文件的两种用途 一.用途 第九章.python文件的两种用途 一.用途 当前运行的文件(脚本) 被导入的文件(模块) # aaa.py x = 1 def f1(): pri ...

  5. 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile

      通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...

  6. 第九章:Python高级编程-Python socket编程

    第九章:Python高级编程-Python socket编程 Python3高级核心技术97讲 笔记 9.1 弄懂HTTP.Socket.TCP这几个概念 Socket为我们封装好了协议 9.2 cl ...

  7. Python 数据分析—第九章 数据聚合与分组运算

    打算从后往前来做笔记 第九章 数据聚合与分组运算 分组 #生成数据,五行四列 df = pd.DataFrame({'key1':['a','a','b','b','a'], 'key2':['one ...

  8. 《Django By Example》第九章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag 注:哈哈哈,第九章终于来啦 ...

  9. 【机器学习实战 第九章】树回归 CART算法的原理与实现 - python3

    本文来自<机器学习实战>(Peter Harrington)第九章"树回归"部分,代码使用python3.5,并在jupyter notebook环境中测试通过,推荐c ...

随机推荐

  1. 任务调度开源框架Quartz概述

    任务调度开源框架Quartz 几乎每个项目中都用到了自动任务处理功能.所以在任务调度的功能很常用,但是一个好的任务调度程序是一个颇具挑战性的工作.最近用到Quartz这个框架,感觉很好,所以进行学习. ...

  2. MongoDB经典入门(1)--安装

    一.前言 最近开始学习非关系型数据库MongoDB,却在博客园上找不到比较系统的教程,很多资料都要去查阅英文网站,效率比较低下.本人不才,借着自 学的机会把心得体会都记录下来,方便感兴趣的童鞋分享讨论 ...

  3. DB2高可用hadr搭建参数配置

    主机上执行db2 UPDATE DB CFG FOR XMHIS USING HADR_LOCAL_HOST 192.168.1.2db2 UPDATE DB CFG FOR XMHIS USING ...

  4. Python笔记11------一个K-means聚类的小例子

    #导入scipy库,库中已经有实现的kmeans模块,直接使用, #根据六个人的分数分为学霸或者学渣两类 import numpy as np from scipy.cluster.vq import ...

  5. WEBGL学习【十】运动模型

    <!DOCTYPE HTML> <html lang="en"> <head> <title>LWEBGL6.2, Animated ...

  6. 【转】H5 input search 提交事件

    欲实现一个文字搜索的功能,要求输入时,键盘回车按钮提示显示为“搜索”.效果如下: 开始~ input type=text并不能达到这种效果,google了一下,HTML5 增加的type=search ...

  7. nyoj181-小明的难题

    小明的难题时间限制:3000 ms  |  内存限制:65535 KB难度:2描述课堂上小明学会了用计算机求出N的阶乘,回到家后就对妹妹炫耀起来.为了不让哥哥太自满,妹妹给小明出了个问题"既 ...

  8. [洛谷P4887]第十四分块(前体)

    题目大意: 给定一个长度为\(n\)的序列\(a\),\(k\),和\(m\)次询问. 每次询问给定区间\([l,r]\),求满足\(l\leqslant i< j\leqslant r\)且\ ...

  9. 端到端图片识别 Python实现 Tensorflow

    基于python语言的tensorflow的‘端到端’的字符型验证码识别 1   Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的 ...

  10. POJ 2157 How many ways??

    How many ways?? Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Origina ...