Python记录14:面向对象编程 类和对象
'''
现在主流的编程思想有两种,一种是面向对象,一种是面向过程
面向过程编程
核心是过程二字,过程指的是解决问题的步骤,即先干什么、再干什么、最后干什么。。。
基于该思想编写程序就好比再设计一条流水线,是一种机械式的思维方式
优点:复杂的问题流程化、进而简单化
缺点:可扩扩展性差
面向对象编程:
核心对象二字,对象是特征(变量)与技能(函数)的结合体,
基于该思想编写程序就好比创造一个世界,你就是这个世界的上帝,
在上帝眼里一切存在的事物都是对象,任何不存在的对象也都可以造出来
是一种上帝式的思维方式
优点:扩展性强
缺点:编程的复杂度高
'''
'''
类:如果说对象是特征与技能的结合体,那么类就是一系列对象相似的特征与技能的结合体
ps:站在不同的角度总结出的类是截然不同的
在现实世界中:一定是先有对象,再有分类的概念
在程序中,务必记住:一定要先定义类,后调用类来产生对象
在现实世界中(站在老男孩选课系统角度)
对象1:
特征
school='Oldboy'
name='李泰迪'
sex='male'
age=18
技能
选课
对象2:
特征
school='Oldboy'
name='牛榴弹'
sex='female'
age=38
技能
选课 对象3:
特征
school='Oldboy'
name='张随便'
sex='male'
age=38
技能
选课 对象4:
特征
name='Egon'
sex='male'
age=18
level=10
技能
打分
点名 现实世界中老男孩学生类
相似的特征
school='Oldboy'
相似的技能
选课 '''
#在程序中
#先定义类
class OldboyStudent:
school = 'Oldboy'
def choose_course(self):
print('is choosing course') # 后调用类来产生对象,调用类的过程又称之为实例化
# stu1=OldboyStudent() # stu1可称为一个对象,也可以称为一个实例
####上面这个语句就是调用类产生一个对象
# print(type(stu1))
#在类定义阶段就会立刻执行类体代码,会产生类的名称空间,用于将类体代码执行过程中产生的名字都存放与类的名称空间中
#在调用类的时候会产生对象,这就是一个实例化的过程,从抽象的类到具体的实例的过程
#这一点和函数定义有很大的不同,函数在定义的阶段代码不会执行,只有在调用的时候才会执行
# class OldboyStudent:
# school = 'Oldboy'
# def choose_course(self):
# print('is choosing course')
# # print('====>')
#类有两种用途
#用途一:类本身就一个容器(名称空间),所以可以增删改查类的属性
# print(OldboyStudent.__dict__)
# print(OldboyStudent.__dict__['school'])
# print(OldboyStudent.__dict__['choose_course'])
# OldboyStudent.__dict__['choose_course'](123) # print(OldboyStudent.school) #OldboyStudent.__dict__['school']
# print(OldboyStudent.xxx) #OldboyStudent.__dict__['xxx']
# print(OldboyStudent.choose_course)
# OldboyStudent.choose_course(123) # OldboyStudent.country='China'
# OldboyStudent.school='Oldgirl'
# print(OldboyStudent.__dict__)
# del OldboyStudent.school
# print(OldboyStudent.__dict__)
#用途二:调用类来产生对象,调用类的过程又称之为实例化
x=1
# class OldboyStudent:
# school = 'Oldboy'
#
# def choose_course(self):
# print('is choosing course')
# stu1=OldboyStudent() # stu1可称为一个对象,也可以称为一个实例
# stu2=OldboyStudent() # stu1可称为一个对象,也可以称为一个实例
# stu3=OldboyStudent() # stu1可称为一个对象,也可以称为一个实例 # def init(obj,x,y,z):
# obj.name=x
# obj.sex=y
# obj.age=z #对象1 独有的特征
# name = '李泰迪'
# sex = 'male'
# age = 18
# stu1.name='李泰迪'
# stu1.sex='male'
# stu1.age=18
#
# init(stu1,'李泰迪','male',18) #对象2 独有的特征
# name = '牛榴弹'
# sex = 'female'
# age = 38
# stu2.name='牛榴弹'
# stu2.sex='female'
# stu2.age=38 # init(stu2,'牛榴弹','female',38)
#对象3 独有的特征
# name = '张随便'
# sex = 'male'
# age = 38
# stu3.name='张随便'
# stu3.sex='male'
# stu3.age=38 # init(stu3,'张随便','male',38) # print(stu1.__dict__)
# print(stu2.__dict__)
# print(stu3.__dict__) # !!!!对象的属性查找是先从对象自己的名称空间中找,找不到则取类中查找。。。。,类中存放的数据是所有对象共有的,内存地址都一样
# print(stu1.x)
# print(stu1.school,id(stu1.school))
# print(stu2.school,id(stu2.school))
# print(stu3.school,id(stu3.school))
# print(stu1.choose_course,id(stu1.choose_course))
# print(stu2.choose_course,id(stu2.choose_course))
# print(stu3.choose_course,id(stu3.choose_course))
# ##初始化方法
# class OldboyStudent:
# school = 'Oldboy'
#
# # stu1, '李泰迪', 'male', 18
# def __init__(self, x, y, z):
# self.name = x #stu1.name = '李泰迪',
# self.sex = y #stu1.sex ='male'
# self.age = z #stu1.age = 18
#
# def choose_course(self):
# print('is choosing course')
#
#
# # 会在类调用时,或者叫实例化时自动触发__init__(stu1,'李泰迪','male',18)
# stu1=OldboyStudent('李泰迪','male',18)
# stu2=OldboyStudent('牛榴弹','female',38)
# stu3=OldboyStudent('张随便','male',38)
#
# print(stu1.__dict__)
# print(stu2.__dict__)
# print(stu3.__dict__)
# 绑定方法
# class OldboyStudent:
# school = 'Oldboy'
#
# # stu1, '李泰迪', 'male', 18
# def __init__(self, x, y, z):
# self.name = x #stu1.name = '李泰迪',
# self.sex = y #stu1.sex ='male'
# self.age = z #stu1.age = 18
#
# def choose_course(self):
# print('%s is choosing course' %self.name)
#
#
# # 会在类调用时,或者叫实例化时自动触发__init__(stu1,'李泰迪','male',18)
# stu1=OldboyStudent('李泰迪','male',18)
# stu2=OldboyStudent('牛榴弹','female',38)
# stu3=OldboyStudent('张随便','male',38)
#
# # OldboyStudent.school='Oldgirl'
# # stu1.school='Oldgirl'
# # print(stu1.__dict__)
# # print(stu1.school)
# # print(stu2.school)
# # print(stu3.school)
#
# # print(OldboyStudent.choose_course)
# # print(stu1.choose_course)
# # print(stu2.choose_course)
# # print(stu3.choose_course)
#
# # OldboyStudent.choose_course(123)
# # OldboyStudent.choose_course(stu1)
#
# # 绑定方法的特殊之处:
# #1、绑定给谁就应该由谁来调用
# #2、谁来调用,就会将谁当做第一个参数自动传入
# stu1.choose_course() # choose_course(stu1)
# stu2.choose_course()
# stu3.choose_course()
# 总结对象的好处
# #1、在没有学习类这个概念时,数据与功能是分离的
# # HOST=‘127.0.0.1’
# # PORT=3306
# # DB=‘db1’
# # CHARSET=’utf8‘
# #
# # def exc1(host,port,db,charset,sql):
# # conn=connect(host,port,db,charset)
# # conn.execute(sql)
# # return xxx
# #
# #
# # def exc2(host,port,db,charset,proc_name)
# # conn=connect(host,port,db,charset)
# # conn.call_proc(sql)
# # return xxx
# #
# # #每次调用都需要重复传入一堆参数
# # exc1('select * from tb1;')
# # exc1('select id,name from tb2;')
# # exc1('select id,name from tb3;')
# # exc1('select id,name from tb4;')
# # exc2('存储过程的名字1')
# # exc2('存储过程的名字2')
# # exc2('存储过程的名字3')
# #
# #
# # x=1
# # y=2
# # z=3
# #
# # def func1():
# # pass
# #
# # def func2():
# # pass
# #
# #
# # class Mysql:
# # def __init__(self,h,p,d,c):
# # self.host=h
# # self.p=p
# # self.d=d
# # self.c=c
# #
# # def exc1(self,sql):
# # conn=connect(self.h,self.,self.d,charset)
# # conn.execute(sql)
# # return xxx
# #
# #
# # def exc2(self,proc_name)
# # conn = connect(self.h, self., self.d, charset)
# # conn.call_proc(proc_name)
# # return xxx
# #
# #
# # obj=Mysql('127.0.0.1',3306,'db1','utf-8')
# #
# #
# #
# #
# # # obj.exc1('select * from t1')
#
#
# # 在python3中统一了类与类型的概念,类就是类型
# import pickle
# class OldboyStudent:
# school = 'Oldboy'
#
#
# def __init__(self, x, y, z):
# self.name = x #stu1.name = '李泰迪',
# self.sex = y #stu1.sex ='male'
# self.age = z #stu1.age = 18
#
# def choose_course(self):
# print('%s is choosing course' %self.name)
#
# def save(self):
# with open('%s.pkl' %self.name,'wb') as f:
# pickle.dump(self,f)
#
# stu1=OldboyStudent('李泰迪','male',18)
# stu1.save()
#
# # print(OldboyStudent)
# # print(list)
# # print(dict)
# # print(int)
#
# l1=list([1,2,3])
# l2=list(['a','b'])
# # print(type(l1))
# # print(type(stu1))
#
# # print(l1.append)
# # l1.append(4) #list.append(l1,4)
# # list.append(l1,4)
# # print(l1)
# # print(l2)
Python记录14:面向对象编程 类和对象的更多相关文章
- python -- 面向对象编程(类、对象)
一.类 类是用来描述具有相同的属性和方法的对象的集合. 它定义了该集合中每个对象共同拥有的属性和方法. 类是一个独立的单位,它有一个类名,其内部包括成员变量和成员方法,分别用于描述对象的属性和行为. ...
- 13_Python的面向对象编程-类class,对象object,实例instance
1.面向对象概述 1.类是用来描述对象的工具,把拥有相同属性和行为的对象分为一组 2.对象是由类实例化出来的一个具体的对象 属性: 对象拥有的名词,用变量表示 ...
- python学习之【第十七篇】:Python中的面向对象(类和对象)
1.什么是类和类的对象? 类是一种数据结构,我们可以用它来定义对象,后者把数据值和行为特性融合在一起,类是现实世界的抽象的实体以编程形式出现.实例是这些对象的具体化.类是用来描述一类事物,类的对象指的 ...
- Python:笔记(3)——面向对象编程
Python:笔记(3)——面向对象编程 类和面向对象编程 1.类的创建 说明:和Java不同的是,我们不需要显示的说明类的字段属性,并且可以在后面动态的添加. 2.构造函数 构造函数的功能毋庸置疑, ...
- Python 中的面向对象编程
面向对象编程(Object-oriented programming, OOP)是一种基于对象概念的编程范式,可包含属性(attribute)形式的数据以及方法(method)形式的代码.另一种对 O ...
- Python学习之==>面向对象编程(二)
一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...
- python进阶01 面向对象、类、实例、属性封装、实例方法
python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...
- Python开发【面向对象编程】
一.概述 面向过程:根据业务逻辑从上到下,完成代码: 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可: 面向对象:对函数进行分类和封装. 二.面向对象 1.类.对象.方法.实例 ...
- 077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象
077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...
随机推荐
- 使用SecureCRT / win7远程桌面连接ubuntu配置记录(有更新)
2017-03-03 更新于末尾 1.Windows7 — Ubuntu 远程桌面连接中 Tab 键不能补全的解决办法 2.xrdp远程连接ubuntu无法使用原机的中文输入法 2017-02-22 ...
- 基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库——操作系统配置,安装必备软件
注意未经说明,所有本文中所有操作都默认需要作为root用户进行操作. 一.安装zmodem,用于远程上传下载文件,安装gedit,方便重定向到远程windows上编辑文件(通过xlanuch) [ro ...
- ReentrantLock可重入锁的理解和源码简单分析
import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; /** * @author ...
- IDEA-各模块间引用出现问题的解决方法
1 点击项目右上角的Project Structure 2 选择Modules->父项目->点击右上角的加号->添加需要依赖的模块
- 六、Sql Server 基础培训《进度6-更新删除(实际操作)》
知识点: 假设,创建表test1,test2. drop table test1 create table test1 ( FID int identity(1,1), FBillNo varchar ...
- ECharts(中国地图篇)的使用
代码html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <me ...
- Java课程寒假之《人月神话》有感之一
一.焦油坑 以前上课的时候,老师讲过早期的程序由于工作量不大,大多只需要几个人完成,随着软件规模的不断扩大,代码量直线上升,仅仅一两个人可能没有办法完成这样的任务,多以开始形成了团队的规模,焦油坑说的 ...
- Oracle出现高占内存的解决办法:
因为安装Oracle时,为了均衡电脑性能和数据库性能,默认内存大小为物理内存的1/8,自身内存比较大时,oracle所占的内存也会变大.而通常,我们自己的环境并不需要分配那么大的内存来支持Oracle ...
- linux中的pwd
https://www.cnblogs.com/crazylqy/p/5818745.html
- ERROR org.hibernate.hql.internal.ast.ErrorCounter unexpected token: form 异常解决
ERROR org.hibernate.hql.internal.ast.ErrorCounter unexpected token: form 异常解决 根据异常提示:我找了我的MySQL语句:果然 ...