Python面向对象的编程

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

内容简介: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间接获取被封装的内容。


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

查看所有标签

猜你喜欢:

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

Design for Hackers

Design for Hackers

David Kadavy / Wiley / 2011-10-18 / USD 39.99

Discover the techniques behind beautiful design?by deconstructing designs to understand them The term ?hacker? has been redefined to consist of anyone who has an insatiable curiosity as to how thin......一起来看看 《Design for Hackers》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

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

HSV CMYK互换工具