一、三大编程范式

编程范式即编程的方法论,标识一种编程风格

三大编程范式:

1.面向过程编程(流水线式)

优点:极大的降低了程序的复杂度

缺点:应用场景固定住了,可扩展性差

2.函数式编程

特点:

a、不修改外部传来值的状态

b、精简,可读性差

c、模仿数学里的函数

3.面向对象编程(是用来解决程序的可扩展性的)

优点:解决了程序的可扩展性

缺点:可控性差

二、面向对象设计与面向对象编程

1、面向对象设计

面向对象设计(Object oriented design):将一类具体事物的数据和动作整合到一起,即面向对象设计

示例:

def school(name,addr,type):
def init(name, addr, type):
sch = {
'name': name,
'addr': addr,
'type': type,
'kao_shi': kao_shi,
'zhao_sheng': zhao_sheng,
}
return sch
def kao_shi(school):
print('%s 学校正在考试' %school['name'])
def zhao_sheng(school):
print('%s %s 正在招生' %(school['type'],school['name']))
return init(name,addr,type) s1=school('oldboy','沙河','私立学校')
print(s1)
print(s1['name'])
s1['zhao_sheng'](s1)
s2=school('清华','北京','公立学校')
print(s2)
print(s2['name'],s2['addr'],s2['type'])
s2['zhao_sheng'](s2)

  

2、面向对象编程

面向对象编程(object-oriented programming):用定义类+实例/对象的方式去实现面向对象的设计

示例:

#对象:学校----->归类
#共有的特征:商标为etiantian
#共有的技能:招生
#独有的特征:地址不一样,老师们,课程 class School:
tag='etiantian'
def __init__(self,addr):
self.addr=addr
self.teacher_list=[]
self.course_list=[] def zhaosheng(self):
pass

  

三、类和对象

关于类和对象:

在日常生活中,一般是先有对象,再有类的概念(比如:先是有很多人,才有了人类的概念),但是在编程语言里,是先有的类,再有的对象

类:把一类事物的相同的特征和动作整合到一起就是类,类是一个抽象的概念

对象:就是基于类而创建的一个具体的事物(具体存在的),也是特征和动作整合到一起

def定义函数是面向对象

class定义类是面向对象

1、类的相关知识:

(1)、声明类:

class   类名(类名规范,尽量首字母大写):

  ‘类的文档字符串’

  类体(类里面的函数)

类名(),类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征

示例:

class Student:
country="china"
def __init__(self,id,name,age,sex):
self.id=id
self.name=name
self.age=age
self.sex=sex
def search_sore(self):
print("good")
def study(self):
print("well") s1=student("123","xuyuanyuan","18","girl")

(2)、关于经典类和新式类

需要注意的是:在python2中,需要区分经典类和新式类,在python3中,没有经典类,都是新式类

经典类:类名后面直接是冒号(示例:class test:)

新式类:类名后面有括号和object(凡是继承了object的类都是新式类)(示例:class test(object))

#在python2中,新式类
class B(object):pass
class C(B):pass
print(B.__bases__)
print(C.__bases__) #在python2中,经典类
class D:pass
print(D.__bases__) # 在python3中,所有的类都是新式类 class A:pass
print(A.__bases__)

  

(3)类属性:特征(变量)和技能(函数)

类是用来描述一类事物,类的对象指的是这一类事物中的一个个体

是事物就要有属性,属性分为

a:数据属性:就是变量

b:函数属性:就是函数,在面向对象里通常称为方法

注意:类和对象均用点来访问自己的属性

示例:

定义一个学生的类:

class Student:
country = 'China' def __init__(self, ID, NAME, SEX, PROVINCE):
self.id = ID
self.name = NAME
self.sex = SEX
self.province = PROVINCE def search_score(self):
print('tell score') def study(self): #self=s1
print('study',self)
#类的用法:实例化,属性引用
s1 = Student('371818181818181', 'cobila', 'female', 'shanxi')#实例化
s1.id='371818181818181'
s1.name='cobila'
s1.sex='female'
s1.province='shanxi'
Student.__init__(s1,'371818181818181','cobila','female','shanxi')#属性引用
print(Student.country)

类有两种作用:属性引用和实例化

属性引用(类名.属性)

实例化(__init__与self)类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征

a、有两种方式查dir(类名):查出的是一个名字列表类名.__dict__:查出的是一个字典,key为属性名,value为属性值

示例:类的“增”、“删”、“改”、“查”

class student:
country="china"
def __init__(self,id,name,age,sex):
self.id=id
self.name=name
self.age=age
self.sex=sex
def search_sore(self):
print("good")
def study(self):
print("well") s1=student("123","xuyuanyuan","18","girl")
##查看类的数据属性
print(s1.country)
print(student.country)
print(student.__dict__)
#
# ##增加类的数据属性
student.location="Asia"
print(student.location) # ##删除类的数据属性
del student.location
print(student.__dict__) # ##修改类的数据属性
student.country="CHINA"
print(student.country)

  

b:特殊的类属性 
类名.__name__# 类的名字(字符串)
类名.__doc__# 类的文档字符串
类名.__base__# 类的第一个父类(在讲继承时会讲)
类名.__bases__# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__# 类的字典属性
类名.__module__# 类定义所在的模块
类名.__class__# 实例对应的类(仅新式类中)
2、对象的相关知识

(1)对象是由类实例化而来的,对象也称实例
对象/实例只有一种作用:属性引用(数据属性即变量),没有函数属性
关于对象调用,用以下示例
class student:
country="china"
def __init__(self,id,name,age,sex):
self.id=id
self.name=name
self.age=age
self.sex=sex
def search_sore(self):
print("good")
def study(self):
print("well") s1=student("123","xuyuanyuan","18","girl")
print(s1.name)
print(s1.id)
print(s1.sex)

  

(2)实例属性

实例属性和查看实例属性的方法如下:

同样是dir和内置__dict__两种方式

示例:

class student:
country="china"
def __init__(self,id,name,age,sex):
self.id=id
self.name=name
self.age=age
self.sex=sex
def search_sore(self):
print("good")
def study(self):
print("well") s1=student("123","xuyuanyuan","18","girl")#实例化
print(s1.__dict__)#查看对象

 

示例:类的“增”、“删”、“改”、“查”

class student:
country="china"
def __init__(self,id,name,age,sex):
self.id=id
self.name=name
self.age=age
self.sex=sex
def search_sore(self):
print("good")
def study(self):
print("well") s1=student("123","xuyuanyuan","18","girl")#实例化
##关于对象
#增
s1.weight=100
print(s1.weight) ##删
del s1.sex
print(s1.__dict__)#查看属性字典是否删除成功 ##改
s1.age=20
print(s1.age) ##查
print(s1.name)
print(s1.age)
print(s1.__dict__)

  

 总结:

1.其实你会发现,实例化就是 类名(),然后返回的结果是一个对象,加上括号是不是跟函数运行很像,函数运行完了有返回值,是不是很像,没错,就是一样的。

2.函数又作用域的概念,其实类也有作用域的概念,二者一样

3.你可以把class当做最外层的函数,是一个作用域

4.实例化会自动触发init函数的运行,最后返回一个值即实例,我们要找的实例属性就存放在init函数的局部作用域里

5.类有类的属性字典,就是类的作用域,实例有实例的属性字典,即实例的作用域

6.综上,一个点代表一层作用域,obj.x先从自己的作用域找,自己找不到去外层的类的字典中找,都找不到,就会报错

7.在类中没有使用点的调用,代表调用全局变量。

关于类和对象名称空间的查看(即作用域):

示例:

class Teacher:

    def __init__(self,name,sex,level):
self.name=name
self.sex=sex
self.level=level
self.course_list=[] def teach(self):
pass
t1=Teacher("tom","man","A")
print(Teacher.__dict__)#类的名称空间查看
print(t1.__dict__)#对象的名称空间查看

执行结果是:

{'__module__': '__main__', '__init__': <function Teacher.__init__ at 0x000000000282A9D8>, 'teach': <function Teacher.teach at 0x000000000282AA60>, '__dict__': <attribute '__dict__' of 'Teacher' objects>, '__weakref__': <attribute '__weakref__' of 'Teacher' objects>, '__doc__': None}
{'name': 'tom', 'sex': 'man', 'level': 'A', 'course_list': []}

补充:

.的方式调用的是属性,要么跟类有关,要么跟实例有关

不加.就跟类没关,跟实例没关。

 

python面向对象——类和对象的更多相关文章

  1. python面向对象(类和对象及三大特性)

    类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态   面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  2. python面向对象:类空间,对象空间, 组合

    一. 类空间,对象空间 1. 类空间,对象空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变 ...

  3. python: 面向对象:类和对象调用类中的变量和方法

    一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...

  4. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  5. Python之面向对象类和对象

    Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object): """ 类里定义一类事物共同的技能. 可以是变量,也可是函 ...

  6. python的类和对象2(self参数)

    python的类和对象2(self参数) 1.python里面对象的方法都会有self参数,它就相当于C++里面的this指针:绑定方法,据说有了这个参数,Python 再也不会傻傻分不清是哪个对象在 ...

  7. Java面向对象-类与对象

    Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...

  8. Python初识类与对象

    Python初识类与对象 类与对象 世界观角度分析类与对象 类是一个抽象的概念,而对象是一个实体的存在,对象由类创造而出,每个对象之间互相独立互不影响,一个对象可以同时拥有多个类的方法,实例化就是通过 ...

  9. python 面向对象(类)

    面向对象,即是将具备某种共性的事物抽象成一个类(模板),然后再根据类来创建实例对象进行具体的使用. 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写, ...

随机推荐

  1. Qt Qwdget 汽车仪表知识点拆解8 淡入效果

    先贴上效果图,注意,没有写逻辑,都是乱动的 看下面的开始,开始的时候有一个带入的效果,这里有一个坑, 网上大部分都是调用下面这个函数 setWindowOpacity(); 但是,你会发现,在你的子窗 ...

  2. SQL 注入教程

    SQL 注入测评教程 1     准备 安装包:Burpsuit.Python27.sqlmap 2     安装配置 2.1    Burpsuit 1)       解压Burpsuit 2)   ...

  3. react实现页面切换动画效果

    一.前情概要 注:(我使用的路由是react-router4)     如下图所示,我们需要在页面切换时有一个过渡效果,这样就不会使页面切换显得生硬,用户体验大大提升:     but the 问题是 ...

  4. Python全栈 MongoDB 数据库(数据的查找)

      非关系型数据库和关系型数据库的区别? 不是以关系模型构建的,结构自由 非关系型数据库不保证数据一致性 非关系型数据库可以在处理高并发和海量数据时弥补关系数据库的不足 非关系型数据库在技术上没有关系 ...

  5. 测试理论- the conten of test plan

    1 testing objects 测试对象 2 testing scope 测试范围 3 testing the frame (?) 4 the environment 5 reason for t ...

  6. linux备忘录-程序管理与SELinux

    知识点 程序与程序(Process and Program) 通过执行一条指令或程序,则可以触发一个事件,并获得一个PID.当我们需要启动一个程序时,我们是启动一个二进制文件(binary file) ...

  7. springMVC前后台数据交互

    假设项目需求是在springMVC框架下,后台要传送一个list到前台,那我们就要做以下几个步骤: 1 在web.xml文件中进行springMVC的配置: <?xml version=&quo ...

  8. lintcode-98-链表排序

    98-链表排序 在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序. 样例 给出 1->3->2->null,给它排序变成 1->2->3->nu ...

  9. vue2.0中vue-router使用总结

    #在vue-cli所创建的项目中使用 进入到项目的目录后使用  npm install vue-router --save  安装vue-router,同时保存在webpack.Json配置文件中,然 ...

  10. 【bzoj3033】太鼓达人 DFS欧拉图

    题目描述 给出一个整数K,求一个最大的M,使得存在一个每个位置都是0或1的圈,圈上所有连续K位构成的二进制数两两不同.输出最大的M以及这种情况下字典序最小的方案. 输入 一个整数K. 输出 一个整数M ...