Python面向对象的编程

栏目: Python · 发布时间: 6年前

内容简介:Python面向对象的编程

在上一章节中,看书自学python-socket编程里面发现很多问题,一个重点是不知道 python 的class是什么,总是在百度每一句代码是什么意思,发现好像问题挺大的,万一后面还出现了class怎么办,难道每一句百度???,果断百度“python面向对象编程”,以下是学习python面向对象编程的一些心得, 原文来自武沛齐 ,很多地方自己改了一下

大纲

1、创建类和对象

2、面向对象的三大特性

创建类和对象

面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

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

从知乎上面看到这样一句话,不知道是对是错,反正我理解不了,感觉太高深

实例就是对象在内存中开辟了空间。

父母口中的女朋友(对象),怀里搂着的她(实例)。

创建一个类:

# 创建类
class Foo:
  #类中定义的函数叫方法 def Bar(self):  #类中的函数第一个参数必须是self print("bar") def Hello(self, name): print("i am %s" % name) # 根据类Foo创建对象obj obj = Foo() # 相当于拿到类里面的所有方法(函数),当然,这是我自己得理解 # Foo().Bar() obj.Bar() # 执行Bar方法 obj.Hello("smelond") # 执行Hello方法

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

面向对象三大特性

一、封装

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

所以,在使用面向对象的封装特性时,需要:

  • 将内容封装到某处
  • 从某处调用被封装的内容

第一步:将内容封装到某处

# 创建类
class Foo:
    def __init__(self, name, age):  # 称为构造方法,根据类创建对象时自动执行
        self.name = name
        self.age = age


# 根据类Foo创建对象
#  自动执行Foo类的__init__方法
obj1 = Foo("wupeiqi", 18)  # 将wupeiqi和16分别封装到(obj1、self)的name和age属性中

# 根据类Foo创建对象
#  自动执行Foo类的__init__方法
obj2 = Foo("smelond", 16)  # 将smelond和16分别封装到(obj2、self)的name和age属性中

self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1

当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2

所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。

Python面向对象的编程

第二步:从某处调用被封装的内容

调用被封装的内容时,有两种情况:

  • 通过对象直接调用
  • 通过self间接调用

1、通过对象直接调用被封装的内容

调用方式:对象.属性名

通过上面的代码直接调用封装的内容
print(obj1.name)
print(obj1.age)
print(obj2.name)
print(obj2.age)

输出
wupeiqi
18
smelond
16

2、通过self间接调用被封装的内容

# 通过self间接调用
class Foo:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def detail(self):
        print(self.name)
        print(self.age)


obj1 = Foo('wupeiqi', 18)
obj1.detail()  # Python默认会将obj1传给self参数,即:obj1.detail(obj1),所以,此时方法内部的 self = obj1,即:self.name 是 wupeiqi ;self.age 是 18

obj2 = Foo('smelond', 16)
obj2.detail()  # Python默认会将obj2传给self参数,即:obj2.detail(obj2),所以,此时方法内部的 self = obj2,即:self.name 是 smelond ; self.age 是 17

输出:
wupeiqi
18
smelond
16

综上所述,对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数学建模(原书第5版)

数学建模(原书第5版)

[美] Frank R. Giordano、[美] William P.Fox、[美] Steven B.Horton / 叶其孝、姜启源 / 机械工业出版社 / 2014-10-1 / 99.00元

《华章数学译丛:数学建模(原书第5版)》旨在指导学生初步掌握数学建模的思想和方法,共分两大部分:离散建模和连续建模,通过本书的学习,学生将有机会在创造性模型和经验模型的构建、模型分析以及模型研究方面进行实践,增强解决问题的能力。 《华章数学译丛:数学建模(原书第5版)》对于用到的数学知识力求深入浅出,涉及的应用领域相当广泛,适合作为高等院校相关专业的数学建模教材和参考书,也可作为参加国内外数......一起来看看 《数学建模(原书第5版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具