抽象基类(了解)

- 说明:
- 抽象基类就是为了统一接口而存在的
- 它不能进行实例化
- 继承自抽象类的子类必须实现抽象基类的抽象方法
- 示例:
from abc import ABC, abstractmethod # 抽象基类
class Animal(ABC):
# 定义抽象方法:规定接口
@abstractmethod
def run(self):
pass # 抽象基类不能实例化
# a = Animal() class Cat(Animal):
# 必须实现基类中规定的抽象方法,才能实例化
def run(self):
print('猫喜欢走猫步') c = Cat() 内置函数 - 构造和析构
__init__、__del__
- 属性操作
__getattr__、__setattr__、__delattr__
- 支持字典操作
__getitem__、__setitem__、__delitem__
- 像函数一样调用
__call__
- 打印输出
__str__
- 对象的字符串表示
class Person:
def __init__(self, name, age):
self.name = name
self.age = age # print/str都会自动触发该方法
def __str__(self):
print('__str__')
return '姓名:{},年龄:{}'.format(self.name, self.age) # 通常用来返回对象的字符串表示形式
# 调用repr方法时会自动触发
def __repr__(self):
return 'Person("{}", {})'.format(self.name, self.age) xiaoming = Person('小明', 20)
# print(xiaoming)
# s = str(xiaoming)
# print(s) r = repr(xiaoming)
print(r)
# eval:可以指向有效python字符串
x = eval(r)
print(x)
print(type(x)) - 算术运算符重载
- 示例
class Number:
def __init__(self, num):
self.num = num def __str__(self):
return str(self.num) # 对象出现在'+'的左边时自动触发
def __add__(self, other):
print('__add__')
return self.num + other # 对象出现在'+'的右边时自动触发
def __radd__(self, other):
return self.num + other # +=运算时会自动触发,若没有则会调用__add__方法
def __iadd__(self, other):
return Number(self.num + other) n = Number(10)
# ret = n + 10
# ret = 20 + n
n += 50 # n = n + 50
print(n) - 自行测试
加法:__add__、__radd__、__iadd__
减法:__sub__、__rsub__、__isub__
乘法:__mul__、__rmul__、__imul__
除法:__truediv__、__rtruediv__、__itruediv__
求余:__mod__、__rmod__、__imod__
- 关系运算符重载
class Number:
def __init__(self, num):
self.num = num # 大于:>
def __gt__(self, other):
return self.num > other # 小于:<
def __lt__(self, other):
return self.num < other # 等于,==会触发,不实现__ne__时,!=也会触发该方法
def __eq__(self, other):
print('__eq__')
return self.num == other # 大于等于:>=
def __ge__(self, other):
return self.num >= other # 小于等于:<=
def __le__(self, other):
return self.num <= other # 不等于:!=
def __ne__(self, other):
return self.num != other n = Number(20)
print(n > 10)
print(n < 10)
print(n != 10) 内存管理 - 引用计数
- python中所有的变量都是通过对象完成的,对象的管理时通过引用计数解决的。
- 当创建一个对象赋值给一个变量时,引用为1,当多一个变量指向对象时,计数值加1;当少一个变量指向对象时,计数值减1,减到0时调用对象__del__方法,释放对象相关资源
- 不可变变量的引用计数值是没有意义的
- 通过函数sys.getrefcount(lt)可以查看对象的引用计数,该函数本身会对对象的引用计数加1
- 函数传参
- 对不可变的变量来说,传递的值,函数中不会改变传递进来的变量。
- 对于可变对象、自定义对象来说,传递的是引用,函数中操作的就是原对象。
- 示例:
def test(n):
n += 10 num = 2
test(num)
print(num) def test2(lt):
lt[0] = 20 lt = [1, 2, 3]
test2(lt)
print(lt) - 深浅拷贝
- 不可变的类型不存在深浅拷贝
- 浅拷贝只会拷贝对象本身,其中的元素只会增加引用
- 深拷贝不但会拷贝对象本身,还会对其中的元素进行拷贝
- 示例:
import copy lt = [[1, 11], 2, 3]
# lt2 = lt
# 浅拷贝:只拷贝对象本身,里面的元素只增加引用
# lt2 = lt.copy()
# 浅拷贝
# lt2 = copy.copy(lt)
# 深拷贝:拷贝对象本身,对象中的元素也进行拷贝
lt2 = copy.deepcopy(lt)
lt2[0] = 100
print(id(lt))
print(id(lt2)) # 判断是否是同一对象的引用
print(lt is lt2)
print(lt) 数据持久化存储 - 说明:持久化存储方案,普通文件、数据库、序列化
- 示例:
import pickle class Person:
def __init__(self, name, age):
self.name = name
self.age = age def __str__(self):
return 'name:{},age:{}'.format(self.name, self.age) xiaoming = Person('xiaoming', 20) # 序列化,会将对象转换为bytes
# s = pickle.dumps(xiaoming)
# print(s) # 从字节流中加载转换为对象
# xm = pickle.loads(s)
# print(xm)
# print(type(xm)) # 直接保存到文件中
# fp = open('data.txt', 'wb')
# pickle.dump(xiaoming, fp) # 从文件中读取对象
fp = open('data.txt', 'rb')
xm = pickle.load(fp)
print(xm)
print(type(xm))

python学习总结----内置函数及数据持久化的更多相关文章

  1. python学习之--内置函数:

    Python内置函数: Python内置了很多有用的函数,我们可以直接调用.要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数. 1. 内置函数调用之--abs()函数: ...

  2. python学习交流 - 内置函数使用方法和应用举例

    内置函数 python提供了68个内置函数,在使用过程中用户不再需要定义函数来实现内置函数支持的功能.更重要的是内置函数的算法是经过python作者优化的,并且部分是使用c语言实现,通常来说使用内置函 ...

  3. Python学习之==>内置函数、列表生成式、三元表达式

    一.内置函数 所谓内置函数就是Python自带的函数 print(all([0,2,3,4])) #判断可迭代的对象里面的值是否都为真 print(any([0,1,2,3,4])) #判断可迭代的对 ...

  4. Python学习(5)——内置函数

    常用字符串内置函数 1)str.count() //返回该字符串中某个子串出现的次数 2)str.find() //返回某个子串出现在该字符串的起始位置 3)str.lower() //将该字符串全部 ...

  5. python学习-31 内置函数

    内置函数 1.abs()  绝对值 2.all()    判断列表里的所有值的布尔值(如果迭代列表里的每个值后都是True 则返回True) '])) 运行结果: True Process finis ...

  6. python学习-34 内置函数的补充

    其他内置函数 1.ord()    与chr()相反 2.pow() print(pow(3,3)) # 相当于3**3 print(pow(3,3,2)) # 相当于3*3%2 运行结果: 27 1 ...

  7. python学习之- 内置函数

    内置方法:1:abs():取绝对值2:all():当可迭代对象里所有均为真时结果为真. all([1,2,3])3:any():当可迭代对象里任意一个数据为真结果即为真.any([0,1,2])4:a ...

  8. python学习(内置函数)

    1.id()返回对象的内存地址 a = 1 print id(a) print id(1) 2.int()用于将数据类型转换为整型 a = " b = 2 print int(a) + b ...

  9. python 常见的内置函数

    内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...

随机推荐

  1. 【洛谷P1879】玉米田Corn Fields

    玉米田Corn Fields 题目链接 此题和互不侵犯状压DP的做法类似 f[i][j]表示前i行,第i行种植(1)/不种植(0)构成的二进制数为j时的方案数 首先我们可以预处理出所有一行中没有两个相 ...

  2. 【题解】洛谷P1350 车的放置(矩阵公式推导)

    洛谷P1350:https://www.luogu.org/problemnew/show/P1350 思路 把矩阵分为上下两块N与M 放在N中的有i辆车 则放在M中有k-i辆车 N的长为a   宽为 ...

  3. HDU1069 Monkey and Banana

    HDU1069 Monkey and Banana 题目大意 给定 n 种盒子, 每种盒子无限多个, 需要叠起来, 在上面的盒子的长和宽必须严格小于下面盒子的长和宽, 求最高的高度. 思路 对于每个方 ...

  4. Unity3D usage Experience

    I have been using Unity3D to make game for half one year. I began to lean Unity3D with some books, o ...

  5. udt的java版本judt项目持续升级1.2版本

    修改了一些问题,努力兼容udt4版本.具体内容查看项目更新说明: 当前项目版本1.2 地址:https://github.com/jinyuttt/judt

  6. Redux学习笔记-----基础部分

    Redux的基本原则 唯一数据源(应用的状态数据应该只存储在唯一的一个store上): 保持状态只读(不能直接修改Store的状态,而是应该通过派发一个action对象来完成) 数据改变只能通过纯函数 ...

  7. 2018 Wannafly summer camp Day8--区间权值

    区间权值 小Bo有\(n\)个正整数\(a_1\)--\(a_n\),以及一个权值序列\(w_1\)--\(w_n\),现在她定义\(f(l,r)=(\sum_{i=l}^r a_i^2) *w_{r ...

  8. 困扰我的c++语法

    以下是我上周学习c++ primer的心得: 1 数组引用作为形参 c++允许将变量定义成数组的引用,以下列代码为例.形参为int (&arr)[10],该参数需分成两部分说明,引用名和 引用 ...

  9. reactor模式---事件触发模型

    Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤. ...

  10. pyecharts的简单使用

    由于需要在项目中展示数据,查了查资料发现,pyecharts模块在网页数据展示方面有很大优势,所以就学了点pyechas 参考博客:Python:数据可视化pyecharts的使用 - JYRoy - ...