Python 面向对象笔记梳理


本文首发于个人博客: https://www.xerrors.fun/python-oop-note/


1. 模块

1. 1 引用方法

import turtle
from turtle import size【1from mymodule import *2

警告:
【1】一般来说,你应该尽量避免使用 from…import 语句,而去使用 import 语句。这是为了避免在你的程序中出现名称冲突,同时也为了使程序更加易读。
【2】这将导入诸如 say_hi 等所有公共名称,但不会导入 version 名称,因为后者以双下划线开头。

1.2典型的库函数:

标准库模块 :**sys**
海龟绘图库:**turtle**
随机数模块:**random**
…

Sys
- sys.argv 存储命令行传递参数的一个列表
- sys.path 包含了导入模块的字典名称列表

1.3 name

每个模块都有一个名称,而模块中的语句可以找到它们所处的模块的名称。
这对于确定模块是独立运行的还是被导入进来运行的这一特定目的来说大为有用。当语句在执行时,能通过判断__name__是否为__main__来判断该模块是否是当前模块。

1.4 dir 函数

内置的 dir() 函数能够返回由对象所定义的名称列表。 如果这一对象是一个模块,则该列表会包括函数内所定义的函数、类与变量。
例:

import sys
dir(sys)	#能够看到sys所包含的一个巨大的属性列表
dir()		#当不传递参数的时候,默认返回当前模块的属性列表。

同时,还有一个 vars() 函数也可以返回给你这些值的属性,但只是可能,它并不能针对所有类都能正常工作。

1.5 包

模块可以看作是把一系列函数组织在一起,而包就相当于把一系列模块组织在一起。包是指一个包含模块以及一个特殊的__init__.py 的文件的文件夹。
例如:

- <some folder present in the sys.path>/
    - world/
        - __init__.py
        - asia/
            - __init__.py
            - india/
                - __init__.py
                - foo.py
        - africa/
            - __init__.py
            - madagascar/
                - __init__.py
                - bar.py 

2. DocString

文档字符串:出现在函数的第一行,约定其中第一行以某一大写字母开始,以句号结束。第二行为空行,后跟的第三行开始是任何详细的解释说明。

用法:
print_max.__doc__

文档字符串也适用于后面相关章节将提到的模块(Modules)与类(Class)

3. 数据结构

一种用来存储一系列相关数据的集合,python 中有四种内置的数据结构,列表,元组,字典,集合

3.1 列表

形式:L = [1,2,3,4,5]
特点:项目可更改(Mutable),列表也是一个序列。

3.2 元组

形式:T = (‘a’, ‘b’, ‘c’) 括号可选,但习惯上不省略
特点:元素/项目不能更改,元组也是一个序列。
注:当元组里面只有一个元素时,为了避免歧义,需要把元组的第一个元素之后加上逗号 例tuple_demo = (1,)

3.3 字典

形式:D = {key1 : value1, key2 : value2}
特点:key 必须是唯一的,value 可以不唯一。且 key 必须是不可变的对象,即简单对象。字典不是一个序列。访问时可使用字典的 item 来访问。

3.4 序列

列表、元组和字符串可以看作序列(Sequence)的某种表现形式。
序列的主要功能是资格测试(Membership Test)(也就是 in 与 not in 表达式)和索引操作(Indexing Operations),它们能够允许我们直接获取序列中的特定项目。
索引
例:S[a]
S[0] 第一个元素
S[-1] 倒数第一个元素
切片
操作对象:序列(包括且不限于列表、元组、字符串)
操作方法:S[a🅱️c]
a 参数:代表从第几个元素起开始执行切片。省略则代表从开头开始切片。
b 参数:代表到第几个元素结束,但不包含该元素。省略则代表对后面所有的元素切片。
c 参数: 代表步长,当步长为-1时代表逆序切片。默认步长为 1.

3.5 集合

形式:se = set([ ‘a’ , ‘b’, ’c’ ])

注意:set注意不要省略,不然创建的是含有一个列表项目的元组
定义:集合是简单对象的无序集合,主要用于当项目的存在与否比起次序来说更加重要时使用。
使用方法:
se.add(‘c’) 添加项目
se.remove(‘a’) 删除项目
se1 & se2 取交集
se1.issuperset(se2) 检验是否是子集

3.5 引用

当创建一个对象并将其分配给某个变量时,变量只会查阅某个对象,并且不会代表对象本身,也就是说,变量名只是指向计算机内存中存储了相应对象的那一部分。这叫做将名称绑定给一个对象。主要出现在这几类数据结构中。
所以:如果想要创建一份诸如序列等复杂对象的副本(而非整数这样的简单的对象)你必须使用切片操作来制作副本。

3.7 字符串

详见 help(str)

4. 面向对象编程

将数据与功能进行组合,并将其包装在被称作对象的东西内。
类和对象是面形对象编程的两个主要方面,一个(class)能够创建一种新的类型(type),其中对象(object)就是类的实例(instance)
对象可以使用他的普通变量来存储数据。这种从属于对象或类的变量叫做字段(field),对象还可以使用属于类的函数来实现某些功能,这种函数叫做类的方法(method),字段和方法统称类的属性(atribute)。

4.1 类

例:

class Person:
    pass
p = Person()
print(p)

输出:
<__main__.Person object at 0x10dd2cf98>
首先通过class语句以及一个类的名称来创建一个新类,后面缩紧的代码块代表这个类的主体。
然后,通过采用类的名称后面跟一对括号的方法,给这个类创建一个对象或实例。

4.2 方法

类的方法,在某些方面类似于对象的函数,唯一的不同就是方法还拥有一个额外的 self 变量。例:

class Person:
    def say_hi(self):
        print('Hello, how are you?')

p = Person()
p.say_hi() 

输出:
Hello, how are you?
在使用方法时可以不需要参数,但是在定义中可以看到拥有self变量。

4.2.1 init 方法

__init__方法会在类的对象被实例化时立即运行。可以对任何你想操作的对象进行初始化操作(Initialization),需要自己定义这个方法。
例:

class Person:
    def __init__(self, name):
        self.name = name

    def say_hi(self):
        print('Hello, my name is', self.name)

p = Person('Swaroop')
p.say_hi()

4.3 类变量与对象变量

字段时类与对象的数据部分,共有两种类型——类变量与对象变量。

  • 类变量(Class Variable
    类变量是共享的(shared)——他们可以被属于该类的所有实例访问。该类变量只拥有一个副本,当任何一个对象对类变量作出改变时,发生的变动将在其它所有实例中都会得到体现。
  • 对象变量(Object variable)
    对象变量由类的每一个独立的对象或实例所拥有。在这种情况下,每个对象都拥有属于它自己的字段的副本,也就是说,它们不会被共享,也不会以任何方式与其它不同实例中的相同名称的字段产生关联。
    注:
    当对象想要引用它的类的变量时,可使用 self.__class__.name来引用。如果一个方法是属于类而非属于对象的方法,这就意味着我们可以将它定义为一个 classmethod (类方法)或者是一个 stticmethod(静态方法),这取决于我们是否需要知道这一方法属于哪个类。

5. 输入与输出

5.1 用户输入内容

a = input(‘Enter text’)

5.2 文件

poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
    use Python!
'''

# 打开文件以编辑('w'riting)
f = open('poem.txt', 'w')
# 向文件中编写文本
f.write(poem)
# 关闭文件
f.close()

# 如果没有特别指定,将假定启用默认的阅读('r'ead)模式
f = open('poem.txt')
while True:
    line = f.readline()
    # 零长度指示 EOF
    if len(line) == 0:
        break
    # 每行(`line`)的末尾
    # 都已经有了换行符
    #因为它是从一个文件中进行读取的
    print(line, end='')
# 关闭文件
f.close()

打开模式:

  • 阅读模式(’r’)默认模式
  • 写入模式(’w’)
  • 追加模式(’a’)
    格式:
  • 文本模式(’t’)默认模式
  • 二进制模式(’b’)

Pickle 模块
Python 提供了一个叫作 Pickle 的标准模块,通过它你可以将任何纯 Python 对象存储到一个文件中,并在稍后将其取回。这叫作持久地(Persistently)存储对象。
例:

import pickle

# 我们存储相关对象的文件的名称
shoplistfile = 'shoplist.data'
# 需要购买的物品清单
shoplist = ['apple', 'mango', 'carrot']

# 准备写入文件
f = open(shoplistfile, 'wb')
# 转储对象至文件
pickle.dump(shoplist, f)
f.close()

# 清除 shoplist 变量
del shoplist

# 重新打开存储文件
f = open(shoplistfile, 'rb')
# 从文件中载入对象
storedlist = pickle.load(f)
print(storedlist)
  • 封装(picking)
    首先通过open以写入二进制模式打开文件,然后调用 pickle.dump(object, file)
  • 拆封(Unpicking)
    直接调用 pickle.load(file) 来接收返回的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值