V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  HelloAmadeus  ›  全部回复第 5 页 / 共 7 页
回复总数  121
1  2  3  4  5  6  7  
2018-09-07 21:49:22 +08:00
回复了 mainlong 创建的主题 Python Python 中一切都是对象,那如果类是对象,那(什么)是类呢?
看点 python 源码实现就对"一切都是对象" 这种模糊的描述更清晰了. 举一个简单的例子如两个 int 相加, 伪代码如下:

PyObject * Interger_Add(PyObject* left, PyObject* right) {

PyIntObject* int_left = (PyIntObject*) left;
PyIntObject* int_right = (PyIntObject*) left;
PyIntObject* int_new = (PyIntObject*) Py_GC_MALLOC(&PyIntObject); # 在 malloc 之后做一些如添加引用计数等工作

int_new->ob_data = int_left->ob_data + int_right->ob_data; # ob_data 为 c long 类型
return (PyObject*) int_new;
}

你看, 一个 两个 int 型相加, 参数传进来的是 PyObject , 返回的是 PyObject. 一切都是对象是不是更好理解了.
还有 Python 的 module 是怎么也是对象. 也有类似这样的函数, PyObjcet* model_reload(PyObject* module);
你看重载 module, 参数传进来的都是 PyObject, 返回的也是 PyObject, 一切都是对象是不是更清晰了?

如果不从 Python 源码来理解的话, 你就要区分 object 这个关键词 python 与 c++和 java 中的区别, object 在 c++和 java 中的概念更像是 python 中 实例(instance) 的概念.

在面向对象编程概念里, 类是抽象数据和与这些抽象数据相关操作的集合, 对象是类的实例, 也就是具体数据和构建在这些具体数据上的集合. 这个概念与 python 中一切都是对象是完全不在一个层面上的比较.

面向对象是一种抽象, 他与语言是无关的, 任何语言都能实现面向对象中的至少一部分想法. 而"一切都是对象" 这句话描述的不是抽象, 而是具体的实现.

python 通过 PyObject 实现了面向对象这个抽象的思想. 所以在一些地方借鉴了思想的关键字. 如 class, object. 但是这些词并不是严格对应面向对象的概念, 因为 python 是多范式的编程语言.

所以把"一切都是对象"中的对象和面向对象编程中的对象 这两个对象区分开, 才能理解 python 中一切都是对象, 这个概念.

P.S. v2 的编辑器真是垃圾.
2018-09-07 21:14:02 +08:00
回复了 mainlong 创建的主题 Python Python 中一切都是对象,那如果类是对象,那(什么)是类呢?
看点 python 源码实现就对"一切都是对象" 这种模糊的描述更清晰了. 举一个简单的例子两个 int 相加, 伪代码如下:

PyObject * Interger_Add(PyObject* left, PyObject* right) {
PyIntObject* int_left = (PyIntObject*) left;
PyIntObject* int_right = (PyIntObject*) left;
PyIntObject* int_new = (PyIntObject*) Py_GC_MALLOC(&PyIntObject);



}
2018-09-05 08:46:59 +08:00
回复了 Jhonson 创建的主题 问与答 Java 的文档有没有类似 Python PEP 计划的文档说明?
java 有 jep,你搜一下
2018-09-04 10:32:51 +08:00
回复了 mikefy 创建的主题 Python Python 初始化对象求助
用装饰器解决
2018-09-03 21:12:32 +08:00
回复了 ivmm 创建的主题 数据库 MariaDB/MySQL vs PostgreSQL 世纪大决战 这个标题看看就刺激
对不起,我选择 mongodb,(滑稽
2018-09-02 12:48:53 +08:00
回复了 mezw 创建的主题 分享创造 一年前的小站点,改版终于完成了
提个建议, 作为搜索来说, 用 card 来显示结果不合适. 同屏展示的信息太少了. 搜索是目的导向的, 目的性很强的. card 是展示给无目的浏览的用户的. 已 google 为例, google 一屏能展示 7 条, 而且标题, url, 内容大小颜色区分很明显.
2018-09-02 12:40:35 +08:00
回复了 bestehen 创建的主题 Python Python 中的 pathlib 怎么用
因为你在 posix 兼容的系统啊, Path 类是一个接口, posixpath 类是具体实现, 你用就行了
2018-08-23 21:34:24 +08:00
回复了 Alerta 创建的主题 Python Python 关于后期绑定的问题,我开始怀疑人生了,求大神解析
```
tmp = [lambda x: x*i for i for range(4)]
```
返回的是:
```
tmp = [lambda x: x*3, ...]
```
```
tmp = (lambda x: x*i for i for range(4))
返回的是:
```
tmp = (lambda x: x*0, lambda x: x**1, ...) # 这是一个生成器
```

列表表达式是即时计算的, 而生成器是迭代时才会计算. 返回的 lamda 匿名函数在查找 i 变量的时候, 列表表达式已经算计完了, 此时的 i 值为 3, 所以计算的返回结果是 6, 而在生成器计算的时候, `for i in range(4)` 的计算是惰性的, 只有你去迭代生成器的时候, i 的值才会 +1. 所以 lambda 表达式查找的 i 变量是 0, 1, 2, 3 的序列.
2018-08-19 12:05:00 +08:00
回复了 leeeeee 创建的主题 Python 请问一下现在新开 Python 项目都用第三版了吧?
最近有个重构项目,用了 f-string 的语法,版本限制在了 3.6 以上,3.7 刚出的时候看了一眼,有些库的 setup 是写死了 Python 支持的版本库的,所以还不能支持 3.7,所以并没有用 dataclass
Python3.6 版本性能才赶得上 Python2.7,估计是 Python3 版本问题
2018-08-17 13:01:17 +08:00
回复了 cqcsdzmt 创建的主题 Python 新手求助 Python 数据格式转换的问题。
struct 模块了解一下,这是 Python2 吗,str 竟然可以直接发送
2018-08-17 10:43:11 +08:00
回复了 mimzy 创建的主题 Python 关于使用 __new__ 方法创建带锁的单例模式可能产生的问题
@mimzy Python 是没有重载的
2018-08-17 09:31:03 +08:00
回复了 mimzy 创建的主题 Python 关于使用 __new__ 方法创建带锁的单例模式可能产生的问题
init 和 new 的魔法方法和普通方法表现一样。子类 override 了父类的方法,要想有父类方法的行为,必须显式的调用父类方法。还有 Python 单例一般通过模块导入实现,模块导入是线程安全的。当然也可以通过原类的__call__方法来实现。学习设计模式是学习思想,具体实现要看语言特性,不要拘泥于一种实现方式。
2018-08-15 23:42:24 +08:00
回复了 implements 创建的主题 问与答 socket 读取文件不完整
@implements 手机打字,点错就发出去了。你贴一下代码吧,发文件的话,SCP 不是更方便吗?
2018-08-15 22:26:28 +08:00
回复了 implements 创建的主题 问与答 socket 读取文件不完整
传文件
2018-08-15 22:17:16 +08:00
回复了 implements 创建的主题 问与答 socket 读取文件不完整
socket.recv 不一定会你传入的长度,这种情况考虑了吗?
2018-08-08 09:43:27 +08:00
回复了 nuko 创建的主题 Python 自学 Python 的话,有没有大佬给点建议???
@nuko 楼主不是想写爬虫吗?干活你也可以理解为能去爬豆瓣了(滑稽
2018-08-07 23:30:27 +08:00
回复了 nuko 创建的主题 Python 自学 Python 的话,有没有大佬给点建议???
Python 核心编程,流畅的 Python 两本书下来,就能干活了
2018-07-21 09:02:07 +08:00
回复了 RYAN0UP 创建的主题 问与答 即将走深圳,拜托 v2 的各位帮忙指点一下。
怎么看着你的简历写的这么不严肃呢
2018-07-18 21:07:19 +08:00
回复了 Kakarrot 创建的主题 Python 如何使用 Python 的 pymongo 模块多表查询数据?
find 两次,不过一般不这样用 MongoDB,最好把 b 表的数据存在 a 表里
1  2  3  4  5  6  7  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3998 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 26ms · UTC 10:18 · PVG 18:18 · LAX 02:18 · JFK 05:18
Developed with CodeLauncher
♥ Do have faith in what you're doing.