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 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...
随机推荐
- C#作为客户端调用gsoap生成的C++服务端
近日在学习C++,偶然遇到网友想用C#调用gsoap生成的C++服务的问题,遂决定研究一下,网上搜索了很久,大多数是C++调用C#的应用.... 经过本人的不断努力,终于找到一种解决问题的方法,总结如 ...
- git踩过的坑
一.git 解决fatal: Not a git repository 我用git add file添加文件时出现这样错误: fatal: Not a git repository (or any o ...
- Java分布式集群,使用synchronized和Redis保证Job的原子性
1.使用synchronized保证并发时,同时只会有一个请求执行该代码段: 2.在执行前先设置并获取Reids标记,先设置然后获取确保是否已经执行:SetOption.SET_IF_ABSENT 可 ...
- k8s的使用
. 查看 kubectl 的状态 kubectl version . 查看集群信息 kubectl cluster-info . 查看节点信息 kubectl get nodes . 创建一个发布 k ...
- Vivado Design Suite用户指南之约束的使用第一部分(介绍部分)
首先来看目录部分: 首先是介绍部分:这部分讲述的是Migrating From UCF Constraints to XDC Constraints(从UCF约束迁移到XDC约束)和About XDC ...
- 11.5vue(5)完结
2018-11-5 19:03:50 老师用了五天把vue昨晚,前后端分离!就是 后端给前端接口,前端用vue,建个项目,然后用vuex接受数据!全在前端显示 后端不涉及任何前端页面!前端用vue把页 ...
- ZooKeeper注册中心安装详细步骤(单节点)
安装 Dubbo 注册中心 Dubbo 建议使用 Zookeeper 作为服务的注册中心. 注册中心服务器(192.168.3.71)配置,安装 Zookeeper: 1. 修改操作系统的/etc/h ...
- ruby 基础知识2 - 区块 block
原文 1. block中的 yield 与遍历 5.times do |i| puts i end 或者 def my_times(n) i = 0 while n > i i += 1 yie ...
- jq 点击按钮显示div,点击页面其他任何地方隐藏div
css .bl_rencai_32{ float: left; height: 35px; line-height: 35px; } .bl_rencai_32 >input{ width: 3 ...
- PHP(基础语法:执行原理)
控制语句for循环 for(var i=0:i<0;++i){ }(基础语法):执行原理for:用在已知数量的情况下(循环次数)while:循环次数不确定(满足某个条件退出循环) 死循环:没有结 ...