Python 发现个奇怪知识,类属性不被实例化修改,即可被外部修改

2022-03-25 19:33:37 +08:00
 llsquaer

今天使用 selenium 使用拖拽效果,发现异常的慢.网上一顿搜索,发现解决办法是修改源码控制间隔的属性值..

这样太不友好了.直接全局改了.后来想看能不能外部写一个继承方法来做,看了源码后,还是放弃,水平有限.于是想的通过外部修改.

于是做了一下实验.

代码如下. 备注有返回值

class AAA():
    DEP = 0

    def get(self):
        return self.DEP


print(AAA.DEP)  # 0

AAA.DEP = 5  # 修改默认属性

ex_1 = AAA()  # 实例化 ex_1
print(ex_1.get())  # 5

AAA.DEP = 10  # 再次修改默认属性
print(ex_1.get())  # 10

ex_1.DEP = 15  # ex_1 修改实例属性
print(ex_1.get())  # 15

AAA.DEP = 12  # 再次修改默认属性
print(ex_1.get())  # 15  被上次实例化修改属性后,类属性不再被修改,即返回 15


ex_2 = AAA()  # 实例化 ex_2
print(ex_2.get())  # 12  上段 ex_2 实例化之前前修改的值

AAA.DEP = 20  # 修改原始属性
print(ex_2.get())  # 20

ex_2.DEP = 30
print(ex_2.get())

# 总结,类实例化后若原始属性不被修改 ,均可被外动态修改

总结,类实例化后若原始属性不被修改 ,均可被外动态修改

后来再次实验,如果被 init 初始化,值也不能被修改了

class AAA():
    DEP = 0
    def __init__(self):
        self.DEP=10   # 被 init 初始化后,不能被修改了
    
    def get(self):
        return self.DEP

感觉奇奇怪怪的知识增加了..

这么说,再次使用 selenium 不用使用 time.sleep 来控制了吧. 还没试,先分享下新发现.

3559 次点击
所在节点    Python
25 条回复
kilasuelika
2022-03-27 23:29:55 +08:00
@DOLLOR 我也是第一次听说 python 中的这种情况。感觉这个特性有点容易导致问题🤣
neoblackcap
2022-03-28 02:40:50 +08:00
如果多写 Python 就会习惯了,这设计就是这样的。甚至还有用这个特性去替代单例模式。
lanlanye
2022-03-28 03:44:15 +08:00
所以不建议水平不够的人写 Python ,更不建议和水平不够的人合作 Python 项目
语言没有约束,就只有靠程序员自己去约束了
hhhhhh123
2022-03-28 10:04:23 +08:00
我没太看懂你想要啥 你可以试试这个
class AAA:
DEP = 0

def get(self):
return self.DEP

def set(self, x):
return self.DEP + x


print(AAA().set(12)) # 12
print(AAA().get()) # 0
Tyler1989
2022-07-22 12:33:37 +08:00
@beastk 站长,看一下 tg

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842921

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX