'''
现在主流的编程思想有两种,一种是面向对象,一种是面向过程
面向过程编程
核心是过程二字,过程指的是解决问题的步骤,即先干什么、再干什么、最后干什么。。。
基于该思想编写程序就好比再设计一条流水线,是一种机械式的思维方式
优点:复杂的问题流程化、进而简单化
缺点:可扩扩展性差
面向对象编程:
核心对象二字,对象是特征(变量)与技能(函数)的结合体,
基于该思想编写程序就好比创造一个世界,你就是这个世界的上帝,
在上帝眼里一切存在的事物都是对象,任何不存在的对象也都可以造出来
是一种上帝式的思维方式
优点:扩展性强
缺点:编程的复杂度高
'''
'''
类:如果说对象是特征与技能的结合体,那么类就是一系列对象相似的特征与技能的结合体
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:面向对象编程 类和对象的更多相关文章

  1. python -- 面向对象编程(类、对象)

    一.类 类是用来描述具有相同的属性和方法的对象的集合. 它定义了该集合中每个对象共同拥有的属性和方法. 类是一个独立的单位,它有一个类名,其内部包括成员变量和成员方法,分别用于描述对象的属性和行为. ...

  2. 13_Python的面向对象编程-类class,对象object,实例instance

    1.面向对象概述 1.类是用来描述对象的工具,把拥有相同属性和行为的对象分为一组     2.对象是由类实例化出来的一个具体的对象         属性: 对象拥有的名词,用变量表示         ...

  3. python学习之【第十七篇】:Python中的面向对象(类和对象)

    1.什么是类和类的对象? 类是一种数据结构,我们可以用它来定义对象,后者把数据值和行为特性融合在一起,类是现实世界的抽象的实体以编程形式出现.实例是这些对象的具体化.类是用来描述一类事物,类的对象指的 ...

  4. Python:笔记(3)——面向对象编程

    Python:笔记(3)——面向对象编程 类和面向对象编程 1.类的创建 说明:和Java不同的是,我们不需要显示的说明类的字段属性,并且可以在后面动态的添加. 2.构造函数 构造函数的功能毋庸置疑, ...

  5. Python 中的面向对象编程

    面向对象编程(Object-oriented programming, OOP)是一种基于对象概念的编程范式,可包含属性(attribute)形式的数据以及方法(method)形式的代码.另一种对 O ...

  6. Python学习之==>面向对象编程(二)

    一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...

  7. python进阶01 面向对象、类、实例、属性封装、实例方法

    python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...

  8. Python开发【面向对象编程】

    一.概述 面向过程:根据业务逻辑从上到下,完成代码: 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可: 面向对象:对函数进行分类和封装. 二.面向对象 1.类.对象.方法.实例 ...

  9. 077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象

    077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...

随机推荐

  1. hdoj:2056

    #include <iostream> #include <iomanip> #include <cstdlib> using namespace std; str ...

  2. Linux的rp_filter与策略路由

    Linux的rp_filter用于实现反向过滤技术,也即uRPF,它验证反向数据包的流向,以避免伪装IP攻击,但是它和Linux的策略路由却很容易发生冲突,其本质原因在于,uRPF技术强制规定了一个反 ...

  3. c++的类的封装/继承/多态的简单介绍

    本篇文章仅仅从很表层来介绍一个C++语言中的类,包括什么是类,类的封装性/继承性和多态性.高手直接跳过吧,看了浪费时间,新手或者想温习一下的可以浏览看看. 1. 什么是类? 到底什么是类(class) ...

  4. Swagger UI 与SpringMVC的整合 II

    pom.xml <!-- swagger开始 --> <dependency> <groupId>io.springfox</groupId> < ...

  5. android studio设置imageview显示图片

    拖动imageview 选择图片 .png 代码引用: private Imageview pay; pay = (ImageView)findViewById(R.id.imageView2); p ...

  6. Android打开doc、xlsx、ppt等office文档解决方案

    妹子我写代码很辛苦/(ㄒoㄒ)/~~ ,转载请标明出处哦~http://blog.csdn.net/u011791526/article/details/73088768 1.Android端有什么控 ...

  7. 手机配置代理报错invalid host header

    手机配置代理后浏手机弹出页面报错invalid host header,因为我是用fiddler配置的,所以这时候就要看下自己配置完之后,是否重启,重启之后就没问题了. fiddle配置参考:http ...

  8. Mybatis常考面试题汇总(附答案)

    1.#{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是预编译处理,${}是字 ...

  9. 基于Gradle的spring boot 项目构建

    今天听只是分享,听到不用maven而使用Gradle构建,就尝试了下 Java三大构建工具:Ant.Maven和Gradle Gradle是一个基于Apache Ant和Apache Maven概念的 ...

  10. pyCharm最新激活码(2018激活码)

    首先输入新的License sever address 首先尝试处理方法是,针对过期会弹出激活框: 选择 Activate new license with License server (用lice ...