V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Kilerd
V2EX  ›  分享创造

闲来无聊,用 Python 实现了一个类似指针的东西

  •  
  •   Kilerd ·
    Kilerd · 2017-06-23 20:44:33 +08:00 · 4701 次点击
    这是一个创建于 2701 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://gist.github.com/Kilerd/b0f51e66cc1a874fa450ca6cae98bb6b 以上是 GIST 地址

    写的原因:

    在一个项目里面,我想类里面的两个元素的值永远保持一样

    用法大概是这样的:

    class A(Alias):
    
        def __init__(self):
            self.a = 1
            self.alias("b", "a")
    
    a = A()
    print(a.a, a.b)
    
    a.a = 2
    print(a.a, a.b)
    
    a.b = 3
    print(a.a, a.b)
    

    执行结果是:

    1 1
    2 2
    3 3
    

    同时,支持简单的递归用法:

    class B:
        a = 1
    
    
    class C(Alias):
    
        def __init__(self):
            self.b = B()
    
            self.alias("a", "b.a")
    
    
    c = C()
    print(c.b.a, c.a)
    
    c.b.a = 2
    print(c.b.a, c.a)
    
    
    c.a = 3
    print(c.b.a, c.a)
    

    输出结果

    1 1
    2 2
    3 3
    

    代码没经过认真测试,边缘情况可能会出错,谨慎使用

    8 条回复    2017-06-28 16:53:37 +08:00
    aploium
        1
    aploium  
       2017-06-23 22:50:41 +08:00   ❤️ 1
    为什么不用 @property
    Kilerd
        2
    Kilerd  
    OP
       2017-06-23 23:13:40 +08:00
    @aploium 竟无言以对(好像是这么一回事
    Kilerd
        3
    Kilerd  
    OP
       2017-06-23 23:17:02 +08:00
    @aploium 喔,递归进去就不行了,你这个写法。
    Kilerd
        4
    Kilerd  
    OP
       2017-06-23 23:18:32 +08:00
    @aploium https://ooo.0o0.ooo/2017/06/23/594d312c60099.png

    这样的话就要每一个 property 都要实现一个 setter
    mooncakejs
        5
    mooncakejs  
       2017-06-23 23:24:15 +08:00 via iPhone
    @Kilerd 也许是 java 的习惯,现在 getter setter 用的很爽
    aploium
        6
    aploium  
       2017-06-24 11:21:09 +08:00
    @Kilerd #3 递归就没办法了,毕竟不是常见的需求
    bravecarrot
        7
    bravecarrot  
       2017-06-25 00:09:56 +08:00 via iPhone
    有点没看懂你的需求?
    不就是一个 instance 中有两个属性,不同的名字,指向同一块内存吗,property 正好啊
    kevinkim
        8
    kevinkim  
       2017-06-28 16:53:37 +08:00
    用户名为"property" 成功被 @,哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3608 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 00:09 · PVG 08:09 · LAX 16:09 · JFK 19:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.