V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
shinonome
V2EX  ›  Python

Python 如何入门面向对象呢

  •  
  •   shinonome · 2022-08-29 23:33:46 +08:00 · 4067 次点击
    这是一个创建于 798 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有看一下 python 面向对象编程指南,内容对于我有点难了, 然后去看了设计模式,有一些收货还是解放迷茫 现在写代码还是那种写一堆函数然后 class 包起来 感觉自己依旧没有丝毫入门对象的迹象 求求大佬指点一下怎么入门对象啊

    26 条回复    2022-08-31 18:53:39 +08:00
    westoy
        1
    westoy  
       2022-08-29 23:57:39 +08:00
    多写, 有了具体业务自然会有抽象和复用的需求, 也就自然会明白了, 没需求光看看不明白的
    LindsayZhou
        2
    LindsayZhou  
       2022-08-30 00:05:04 +08:00
    找个漂亮的,不太大开源项目啃完。
    我现在在看 fastpi/starlette 的源码,fastapi 是从 starlette 继承来的,Route Middleware App 之类的包装个人觉得还可以,只是看起来 fastapi 的作者不太喜欢写注释。
    shinonome
        3
    shinonome  
    OP
       2022-08-30 00:12:44 +08:00 via Android
    @westoy 唔,确实没需求,所以不知道怎么下手,大佬有推荐 简单的项目吗
    shinonome
        4
    shinonome  
    OP
       2022-08-30 00:12:54 +08:00 via Android
    @LindsayZhou 我喵喵,写写大佬
    yucongo
        5
    yucongo  
       2022-08-30 01:06:08 +08:00 via Android
    写个小 gui 工具差不多就入门面向对象了
    LeeReamond
        6
    LeeReamond  
       2022-08-30 04:09:13 +08:00
    你不需要看设计模式,python 既有全局变量这种东西,又有一等公民函数,又不是写 JAVA
    oakcdrom
        7
    oakcdrom  
       2022-08-30 07:56:26 +08:00
    虽然我也用的少。。。我连 class 都不用。 一切 def
    whywaoxaks
        8
    whywaoxaks  
       2022-08-30 08:05:32 +08:00
    看需求。完全没必要强行搞对象。
    joApioVVx4M4X6Rf
        9
    joApioVVx4M4X6Rf  
       2022-08-30 10:08:38 +08:00
    同问
    HiCode
        10
    HiCode  
       2022-08-30 11:03:03 +08:00
    现有业务,再有针对实际业务需求的抽象,最后才是面向对象的实现。

    强行为了面向对象而面向对象,是某些 javaer 的最爱。
    anonymousar
        11
    anonymousar  
       2022-08-30 11:12:04 +08:00
    多态 /泛型 是核 xin 内容。 想深入了解还是从 cpp 入手比较好。另外上面这些拿个 class 说面向对象的, 真的写过代码?
    DOLLOR
        12
    DOLLOR  
       2022-08-30 11:18:46 +08:00 via Android
    靠 Python 深入面向对象是不太合适的。
    如果想深入面向对象的“精髓”,还是靠 Java 比较合适。
    当然不必强求面向对象、面向 class 开发,能解决问题才是最重要的。
    warcraft1236
        13
    warcraft1236  
       2022-08-30 11:36:51 +08:00
    看几个 Python 的优秀的库就行了,比如 requests 之类的
    arischow
        14
    arischow  
       2022-08-30 11:39:04 +08:00 via iPhone
    Python 的面向对象还要结合它的 data model 来理解
    anjiannian
        15
    anjiannian  
       2022-08-30 11:48:09 +08:00 via Android
    对,楼上有人说了,看优秀的库,requests ,flask
    elboble
        16
    elboble  
       2022-08-30 12:38:02 +08:00 via Android
    看视频学的 django ,学到 restframework ,从 apiview 到 viewset ,一系列抽象,真是看的男默女泪
    ospider
        17
    ospider  
       2022-08-30 13:52:45 +08:00   ❤️ 1
    @warcraft1236 requests 除了 API 设计,哪方面也和优秀挂不上钩……
    shinonome
        18
    shinonome  
    OP
       2022-08-30 15:39:02 +08:00
    感谢大家,我去找一点简单的项目了
    lanlanye
        19
    lanlanye  
       2022-08-30 15:55:34 +08:00
    我觉得简单一点从抽象考虑,如果你需要把一组方法和数据放在一起,那就会自然地使用面向对象,否则别强上,没必要。
    ipwx
        20
    ipwx  
       2022-08-30 16:00:14 +08:00
    现在通常所说的设计模式 OOP ,最佳实现模版就是 Java 那一套。当然结果大家都知道了,纯 OOP 单继承的设计模式就是又臭又长,虽然对于规范良莠不齐的团队开发很有用。

    Python 一般情况下都不是纯粹的 OOP ,Pythonic 是一种混合了函数式、命令式和 OOP 的特殊形式,形成了它自己特有的写法。一般来说相同的功能,Pythonic 写起来还挺简洁的。——当然,也不绝对。

    ----

    总之按楼主的初学者属性,用 Python 去对照设计模式容易走火入魔。要么忘记“设计模式”去体会 Pythonic ,要么扔掉 Python 去学习设计模式。
    abersheeran
        21
    abersheeran  
       2022-08-30 16:34:29 +08:00
    当你不确定是不是需要用 class 的时候就别用 class 。一味的追求面向对象是 Java 之流的糟粕。

    另外不推荐看楼上说的 Starlette 学习面向对象 @LindsayZhou 。它理念很好, 但……。比如说,它的 Response 基类设计非常糟糕,绝大部分子类都会重写一部分它的方法,这违反了面向对象编程里“尽量不要重写父类方法”的原则。别的还有很多,我就不一一列举了。可以看看这个做一个对比,https://github.com/abersheeran/baize/blob/master/baize/wsgi/responses.py
    hahaba
        22
    hahaba  
       2022-08-30 18:48:08 +08:00
    尽量面向函数,而不是对象
    evil0harry
        23
    evil0harry  
       2022-08-30 21:00:16 +08:00
    我读了 django 的源码,收益颇丰。
    lambdaq
        24
    lambdaq  
       2022-08-30 21:05:09 +08:00
    面向对象一般都是在 GUI 和游戏编程里用。

    你遇到类似需求自然就理解了。
    warcraft1236
        25
    warcraft1236  
       2022-08-31 08:51:55 +08:00
    @ospider 不优秀的点在哪
    shinonome
        26
    shinonome  
    OP
       2022-08-31 18:53:39 +08:00
    @xunbug 主要感觉一直都是面向函数的,一直听面向对象,但是一直没能理解,所以想看看
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3388 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:03 · PVG 19:03 · LAX 03:03 · JFK 06:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.