Python 如何入门面向对象呢 - V2EX
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 4488 次点击
    这是一个创建于 1143 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有看一下 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
      nbsp; 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
    同问
    Q4h7388nR28s95fa
        10
    Q4h7388nR28s95fa  
       2022-08-30 11:03:03 +08:00
    现有业务,再有针对实际业务需求的抽象,最后才是面向对象的实现。

    强行为了面向对象而面向对象,是某些 javaer 的最爱。
    anonymousar
        11
    anonymousar  
       2022-08-30 11:12:04 +08:00
    多态 /泛型 是核 xin 内容。 想深入了解还是从 cpp 入手比较好。另外上面这些拿个 class 说面向对象的, 真的写过代码?
    AV1
        12
    AV1  
       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 ,一系列抽象,真是看的男默女泪
    4BVL25L90W260T9U
        17
    4BVL25L90W260T9U  
       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     Solana     5133 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 09:25 PVG 17:25 LAX 02:25 JFK 05:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86