Python面向对象1:基础介绍+封装特征

目前有三种编程方式:

面向过程:根据业务逻辑从上到下写垒代码

函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

面向对象:对函数进行分类和封装,让开发“更快更好更强...”

java只支持面向对象编程;python支持函数式编程、面向对象编程

1、面向对象其实就是对类和对象的使用

案例1:函数式编程和面向对象编程初步比较

#函数式编程执行方法:【执行函数】

#面向对象编程:【创建对象】【通过对象执行方法】

创建对象及使用的步骤:

a创建类

class类名():

   def 方法名(self,xxx):#xxx是我们需要传的参数,self是必须的参数

pass

b.创建对象

对象=类名()

c.通过对象执行方法

对象.方法名(123)#123为传入的参数

总结:

面向对象含有两个特殊的东西:类、对象;

面向对象编程其实就是对 “类” 和 “对象” 的使用。

类就是一个模板,模板里可以包含多个函数(也即方法),函数是用来实现各种功能的

对象则是根据模板创建的实例,通过实例对象可以执行类中的函数(方法)

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是self。

2、面向对象的三大特性是指:封装、继承和多态。

2-1 封装:

使用构造方法将内容封装到对象中,然后通过对象直接或者self间接获取被封装的内容

将内容封装到某处

从某处调用被封装的内容

案例2-1:封装方法1:将参数值在对象中一个个封装,通过对象直接调用,这是初级的笨方法。

self是python自动会给传值的参数,哪个对象执行方法,self就是谁;比如obj1执行时,self就代指obj1,取各种赋值的参数

classSQLHelper():

deffetch(self, sql):

print(self.name)

print(sql)

defcreate(self, ad):

print(ad)

defremove(self, nig):

print(nig)

#执行对象1

obj1 = SQLHelper()# 创建对象1,self就是指obj1

obj1.hhost ="c1.hhh.com"# 赋值

obj1.name ='对象1'

obj1.pwd =123

obj1.fetch("select * from A")# 调用对象的fetch方法

#执行对象2

obj2 = SQLHelper()# 创建对象2,self就是指obj2

obj2.hhost ="c1.ddd.com"

obj2.name ='对象2'

obj2.pwd =4333

obj2.fetch("select * from B")# 调用对象的fetch方法

执行结果:

案例2-2:封装方法二:将参数值一次性封装进对象,调用时,通过对象直接调用被封装的内容

classSQLhelper:#创建对象

# 封装参数,相同的值/参数直接放到一个地方,即init方法

def__init__(self,a1,a2,a3):

print('对象后面加括号,自动执行init方法')

self.hhost=a1

self.name=a2

self.pwd=a3

#调用对象1:

obj1=SQLhelper('c1.hhh.com','对象1',123)#执行init方法

print(obj1.name)# 直接调用obj1对象的name属性

print(obj1.pwd)# 直接调用obj1对象的pwd属性

#调用对象2

obj2=SQLhelper('c1.dddd.com','对象2',4333)#执行init方法

print(obj2.name)# 直接调用obj2对象的name属性

print(obj2.pwd)# 直接调用obj2对象的pwd属性

执行结果:

案例2-3:调用方法:执行类中的方法时,需要通过self间接调用被封装的内容

classSQLhelper:#定义对象

def__init__(self,a1,a2,a3):#封装参数,相同的值/参数直接放到一个地方,即init方法

print('对象后面加括号,自动执行init方法')

self.hhost=a1

self.name=a2

self.pwd=a3

defdetail(self):#通过封装方法调用参数

print(self.hhost)

print(self.name)

#调用

obj1=SQLhelper('c1.hhh.com','对象1',123)#执行init方法

obj1.detail()

obj2=SQLhelper('c1.dddd.com','对象2',4333)#执行init方法

obj2.detail()

执行结果:

案例3:封装与调用三种方法比较的案例,通过嵌套调用封装的参数

classc1:

def__init__(self,name,obj):

self.name=name

self.obj=obj

classc2:

def__init__(self,name,age):

self.name=name

self.age=age

defshow(self):

print(self.name)

classc3:

def__init__(self,a1):

self.money=333#如果money不需要传参数,就不需要放在init方法中了

self.aaa=a1#a1是参数,aaa是c3的参数

c2_object=c2("c2name",11)#实例化c2对象

#c2_object是c2类型

#name="c2name"

#age=11

#包含show方法

c1_object=c1("c1name",c2_object)#实例化c1对象

##c1_object是c1类型,嵌套c2_object

#name="c1name"

#obj=c2_object,包含c2_object的全部参数(name="c2name",age=11,show方法)

c3_object=c3(c1_object)#实例化c3对象

#c3_object是c3类型,嵌套c1_object

#money=333,是固定参数

#aaa=c1_object,即包含c1_object的全部参数(name="c1name"、obj=c2_object)

#调用方法:

c2_object.show()#方法1,通过c2_object

c1_object.obj.show()#方法2:通过c1_object的obj属性调用

c3_object.aaa.obj.show()#方法3:通过c3_object的aaa属性调用

执行结果:三种方法的效果是一致的

案例4:案例比较函数和面向对象编程:

如果使用函数式编程,需要在每次执行函数时传入相同的参数,如果参数多的话,又需要粘贴复制了... ;

而对于面向对象编程只需要在创建对象时,将所有需要的参数全部封装到当前对象中,之后再次使用时,通过self间接去当前对象中取值即可。

题目:

小明,10岁,男,上山去砍柴

小明,10岁,男,开车去东北

小明,10岁,男,最爱打地主

老李,90岁,男,上山去砍柴

老李,90岁,男,开车去东北

老李,90岁,男,最爱打地主

....

老张...

#函数式编程实现方法:

classFoo():

def__init__(self,name,age,gender):

self.name=name

self.age = age

self.gender = gender

defshangshan(self):

print("姓名{},{}岁,{},上山去砍柴".format(self.name,self.age,self.gender))

defkaiche(self):

print("姓名{},{}岁,{},开车去东北".format(self.name,self.age,self.gender))

deflove(self):

print("姓名{},{}岁,{},喜欢打地主".format(self.name,self.age,self.gender))

#调用对象1,小明

xiaoming=Foo("小明","10","男")

xiaoming.shangshan()

xiaoming.kaiche()

xiaoming.love()

#调用对象2,小刘

liu=Foo("小刘","20","女")

liu.shangshan()

liu.kaiche()

执行结果:

课程参考:老男孩python课程

本文来自企鹅号 - 乐想屋媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从流域到海域

《笨办法学Python》 第6课手记

《笨办法学Python》 第6课手记 第6课讲字符串和文本,作者给出的代码如下: x = "There are %d types of people." % 1...

20550
来自专栏CodingToDie

Python学习(二):基础

第2 章 基础 Table of Contents 输入和输出 输出 输入 数据类型 整数 浮点数 字符串 布尔值 空值 变量 常量 输入和输出 输出 prin...

35950
来自专栏Python爬虫实战

Python指南:组合数据类型

Python提供了5中内置的序列类型:bytearray、bytes、list、str与tuple,序列类型支持成员关系操作符(in)、大小计算函数(len()...

17410
来自专栏java初学

final关键字

402120
来自专栏blackheart的专栏

[C#2] 1-泛型

1. 泛型概述 泛型是一种类型的多态;比如当我们写一个栈或者队列的时候,需要指定其数据类型,int一份代码,string一份代码,object的一份代码, 这些...

237100
来自专栏土豆专栏

Java面试之数据类型(一)

封装类是引用类型,基本类型在传递参数的时候都是按值传递,而封装类型是按引用传递的(其实引用也是按值传递的,但是传递的是对象的地址)

20520
来自专栏深度学习思考者

C++常见问题(二)——虚函数、类与结构、引用与值传递

一 文件输入输出的方式 C++定义了ifsteam、ofstream和fstream 3种类型以用来支持文件的输入输出。 二 异常 异常就是程序运行时出...

20160
来自专栏小古哥的博客园

JavaScript 正则表达式入门教程

正则表达式是描述一组字符串特征的模式,用来匹配特定的字符串 主要分三个部分:基本语法、RegExp对象的方法、JS中支持正则表达式的String对象方法 一、基...

34630
来自专栏idba

Python内置函数介绍

一 前言 在编写Python 程序或者工具脚本时,需要完成某个功能,可以选择编写一个具体的函数达到目的,当然也可以通过匿名/Python 内建函数来完成。本...

7820
来自专栏DannyHoo的专栏

为什么NSString要用Copy来修饰?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

19220

扫码关注云+社区

领取腾讯云代金券