V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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
tubowen
V2EX  ›  Python

Python 一个继承的问题

  •  
  •   tubowen · Nov 15, 2024 via Android · 2619 views
    This topic created in 537 days ago, the information mentioned may be changed or developed.
    Python 中
    定义了一个 TCP 类,继承自 socket.socket 类
    TCP 类中的 init 方法:
    def __init__(self):
       super().__init__()
       self.name="xxx"

    TCP 类只重写了 init 这一个方法
    现在 tcp 类的实例,调用 accept 方法的时候,返回的是 socket 类的实例,没有 name 属性,
    应该怎么重写 accept 方法,可以让 tcp 类的实例调用 accept 方法的时候,有 socket 类的 accept 方法的作用,同时还能返回一个 TCP 类的对象,因为后面要用它的 name 字段
    5 replies    2024-11-20 10:42:32 +08:00
    julyclyde
        1
    julyclyde  
       Nov 15, 2024
    先不说你的设计错误
    单说技术问题,你还得覆盖一下 accept 方法,让它先调用原始的 accept 然后再修改即将返回的对象,变成返回你的自定义类
    tubowen
        2
    tubowen  
    OP
       Nov 15, 2024 via Android
    @julyclyde 是得重写 accept 方法,这里可以怎么把父类的对象转成我自定义的对象
    julyclyde
        3
    julyclyde  
       Nov 15, 2024
    @tubowen 你加一个构造函数,用父类对象做参数,包一下
    yingxiangyu
        4
    yingxiangyu  
       Nov 16, 2024
    @tubowen #2 python 除非自定义方法,不然没发像 c++一样去转的
    frostming
        5
    frostming  
       Nov 20, 2024   ❤️ 1
    你这场景就是组合优于继承
    写一个类包装一个 socket ,比继承 socket 添加自己的方法,更适合解决你的需求
    这样把 accept 得到的 socket 包装一下就能得到你的对象
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3832 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 05:06 · PVG 13:06 · LAX 22:06 · JFK 01:06
    ♥ Do have faith in what you're doing.