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
tubowen
V2EX  ›  Python

Python 一个继承的问题

  •  
  •   tubowen · 36 天前 via Android · 1144 次点击
    这是一个创建于 36 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 条回复    2024-11-20 10:42:32 +08:00
    julyclyde
        1
    julyclyde  
       36 天前
    先不说你的设计错误
    单说技术问题,你还得覆盖一下 accept 方法,让它先调用原始的 accept 然后再修改即将返回的对象,变成返回你的自定义类
    tubowen
        2
    tubowen  
    OP
       36 天前 via Android
    @julyclyde 是得重写 accept 方法,这里可以怎么把父类的对象转成我自定义的对象
    julyclyde
        3
    julyclyde  
       36 天前
    @tubowen 你加一个构造函数,用父类对象做参数,包一下
    yingxiangyu
        4
    yingxiangyu  
       35 天前
    @tubowen #2 python 除非自定义方法,不然没发像 c++一样去转的
    frostming
        5
    frostming  
       31 天前   ❤️ 1
    你这场景就是组合优于继承
    写一个类包装一个 socket ,比继承 socket 添加自己的方法,更适合解决你的需求
    这样把 accept 得到的 socket 包装一下就能得到你的对象
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2163 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 01:14 · PVG 09:14 · LAX 17:14 · JFK 20:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.