面向对象思想

关注公众号“轻松学编程”了解更多。

1、面向对象的设计思想

面向对象是基于万物皆对象这个哲学观点。

2、面向对象和面向过程的区别

面向过程

 在生活中:
它是一种看待问题的思维方式,在思考问题的时候,
着眼问题是怎样一步一步解决的,然后亲力亲为去解决问题【类似于公司里的执行者】。 在程序中:
​ 代码是从上而下顺序执行,各个模块之间的关系尽可能简单,
在功能上相对独立,程序的流程在写程序的时候就已经决定。

面向对象

> 在生活中:
>
> 它是另一种看待问题的方式,它着眼于找到一个具有特殊功能的个体,
> 然后委托这个个体去帮你完成某件事.这更符合人类思考习惯的思想【指挥者】。
>
> 在程序中:
>
> 把数据以及对数据的操作方法放在一起,作为一个相互依存的整体--对象;
>
> 把同类的对象进行抽象出其共性,形成类;
>
> 类中大多数数据,只能用本类的方法进行处理;
>
> 类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信;
>
> 程序执行的流程由用户在使用的过程中决定;
>
> 使用面向对象思想进行开发,需要先找到具有所需功能的对象来使用,
> 如果这个对象不存在,那么则需要创建这么一个具有所需功能的对象。
>
> 注意:面向对象只是一种思想,并不是一门编程语言。 **区别总结** > a. 都是看待问题的一种思维方式,都能解决问题;
>
> b. 面向过程着眼于所有的事情亲力亲为;
>
> c. 面向对象着眼于找到一个具有特殊功能的对象,委托这个对象实现你需要实现的功能。
>
> python语言是面向对象的程序设计语言,类和对象是面向对象的核心。

类和对象

1、类和对象的概念

:一个具有特殊功能的实体的集合[群体]。

对象:在一个类中,一个具有特殊功能的实体,能够帮忙解决特定的问题,对象通常也被称为实例。

两者之间的关系:类用于描述某一对象的共同特征,而对象则是类的具体存在

举例:

学生 张三、李四

快递 顺丰、韵达

总结:

类与对象的关系:

a.类是对象的抽象,对象是类的具体体现。

b.类也是一种数据类型,只不过是自己定义的,类似与number,string等,它本身并不占用空间,但是它的实例[对象]是占用空间的。

2、类的定义

格式:

class 类名(object):

​ 类体

说明:

a.python中使用class关键字定义类;

b.类名只要是一个合法的标识符即可,命名规则遵循"大驼峰式命名"【每个单词的首字母大写】;

c.尽量使用单个或者多个有意义的单词连接而成

演示

# 一个简单的类的实例
class Person():
print("hello")

3、类的设计

只需要关心3样东西

1.事物名称[类名]: 如人类 (Person);

2.特征(属性): 如身高(height) 年龄(age)等 ——>名词;

3.行为(方法): 如跑(run) 说话(say) —————>动词。

类中的方法和属性

1、方法和属性的定义

生活中描述事物的无非就是描述事物的特征和行为。

python中用类来描述事物也是如此,前面已经定义了类,但是,如果只有类单独存在,没有任何意义,所以定义类其实就是定义类中的成员[成员变量和成员方法]。

在类中的变量我们称之为成员变量,在类中的方法我们称之为成员方法(函数)。

成员变量—>类具有的特征 例如:人—>身高,性别,体重。

成员方法 —>类具有的行为 例如人—>吃喝玩乐。

因此,拥有相同的(或者类似)属性和行为的对象都可以抽取出一个类。

class Persion():
#成员变量,初始值就是相当于默认值
name = ""
age = 0
height = 0
weight = 0
#成员方法
#在类的内部,使用def关键字来定义的一个方法
#注意:区别于普通方法,类中方法的参数必须包含参数self,且为第一个参数
#self代表类的实例(某个对象)
def run(self):
print("run") def eat(self, food):
print("eat",food) def sleep(self):
print("sleeping")

说明:定义了类,并在类中定义了成员变量和成员方法,但是成员变量和成员方法是如何使用的呢?

2、方法和属性的使用

2.1、实例化对象:

前面说过,对象是实实在在的个体,负责去完成某件指定的事情。

对象的创建的过程又被称作对象的实例化过程。

语法:

对象名 = 类名()

'''
实例化对象
格式: 对象名 = 类名()
注意: 没有参数的时候,小括号也不能省略
''' #实例化一个对象
pre1 = Person()
print(pre1)
print(type(per1))
print(id(per1)) per2 = Person()
print(per2)
print(type(per2))
print(id(per2))

3、对象调用方法和属性

per = Preson()
'''
访问属性
格式:对象名.属性名
赋值:对象名.属性名 = 新值
'''
per.name = 'lili'
per.age = 18
per.height = 160
per.weight = 80
print(per.name, per.age, per.height, per.weight) '''
访问方法
格式:对象名.方法名(参数列表)
'''
per.run()
per.eat("apple")
per.sleep() #问题:目前来看Person创建的所有对象属性都是一样的
per2 = Person()
print(per2.age)
per3 = Person()
print(per3.age)

总结:

访问变量采用: 对象名.属性名;

访问方法采用: 对象名.方法名(参数列表)。

4、内存中的对象

per = Person()

说明:程序中定义Person类型的变量per实际是一个变量名,它被存放在栈内存中,它指向实际的Person对象,而真正的Person对象则存放在堆内存中。

综合练习:

第一天开学,介绍一下你自己其中包括姓名,年龄以及爱好

#学生类
class Student():
#特征:成员变量
self.name = ""
self.age = ""
self.hobby ="" def introduce(self,name, age, hobby):
print("大家好,我是%s,今年%d岁,爱好是%s"%(name,age, hobby)) def singsong(self):
print("娘子~啊哈") def dance(self):
print("广场舞跳起来...") def lie(self):
print("我家特别穷,我小时候就一直在放牛,只有几万头....") # 类实例化
stu = Student()
# 成员方法调用
stu.introduce('ldc',18,'跑步')
stu.singsong()
stu.dance()
stu.lie()
输出:
大家好,我是ldc,今年18岁,爱好是跑步
娘子~啊哈
广场舞跳起来...
我家特别穷,我小时候就一直在放牛,只有几万头....

如何查看所有属性和方法

class Test():
def __init__(self,name):
self.name = name
def test(self):
print('testing...') test = Test('测试')
# 查看所有属性和方法
list1 = dir(test)
# 检查实例是否有这个属性
print(hasattr(test, 'name'),hasattr(test, 'test'),hasattr(test, 'tt'))
# 设置属性值
setattr(test,'name','测试2')
# 获取属性值
print(getattr(test, 'name'))
输出:
True True False
测试2

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

最新文章

  1. 微信小程序 教程之引用
  2. ServiceMix in daemon mode
  3. CocoaPod遇到更新不了的原因
  4. Jenkins学习六:修改Jenkins用户的密码
  5. ace布置小作业: 制作一个简单的电话号码归属地查询软件:JSON解析和Volly发送get请求
  6. C编译: 动态连接库 (.so文件)
  7. Java中生成随机字符的方法总结
  8. LAMT基于mod_proxy方式的负载均衡集群
  9. [JavaScript] 用html5 js实现浏览器全屏
  10. VS2010 ReportViewer导出文件下载保存不能识别文件类型
  11. Android4.0设置界面改动总结(三)
  12. 第四十七节,random 随机数模块
  13. SVG 入门——理解viewport,viewbox,preserveAspectRatio
  14. VS生成项目时,有些文件无法复制到输出目录的解决办法
  15. Java中关于quartz定时任务时间设置
  16. 【工具相关】web-HTML/CSS/JS Prettify的使用
  17. Direct2D教程I——简介及首个例子
  18. 013_Mac OS X下应该如何卸载软件和安装应用软件
  19. Sqlserver 数据库、表常用查询操作
  20. vim 正则替换【转】

热门文章

  1. Python练习题 011:成绩打分
  2. Mbedtls和Opesnssl 解码x509Certificate
  3. Java学习day01
  4. P5035金坷垃题解(快速幂的讲解)
  5. 什么是64位和32位internet explorer
  6. 持续更新——dp的一些技巧
  7. 跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)
  8. 远程触发Jenkins的Pipeline任务的并发问题处理
  9. IDEA 简拼输入
  10. centos8下启用rc-local服务