python中,如何在初始化实例时,动态为其添加属性

python中,如何在初始化实例时,动态为其添加属性,第1张

代码看起来没有问题。如果在python3上不能用,应该也只需要小小的调整。原则上应该跑得通。

不过话说回来,这样的技巧通常在python里用不上。因为python的强大并不是因为它的面向对象属性

而且这些写代码的可读性也较差。 python的强大在于它通用,它与C的良好结合,最重要的是它是“脚本”。 可以动态的做任何事情,既然它的动态很强大,你就不需要写这样的代码。

直接这样

s1= AnyClass()

s1.any_variable = some_value

这样足够了。因为python可以自动给未知的变量,增加一个内部属性。所以我经常写下面的这样的代码

class Config:

    pass

conf = Config()

conf.mysql_ip = "127.0.0.1"

这样就可以了

比较简单的方式是把str和int理解为“原始数据类型”,其结构是不可以修改的。理由是,str和int是python中提供的标准数据类型,大家已经对这种数据类型的性质和用法有了普遍的共识和预定。如果硬要自己进行修改或者加上一些自定义的属性,就很容易破坏这种“共识”,进而导致程序可读性下降,甚至引入潜在的bug。

如果需要动态添加属性,就自己去定义一个专门的class,并在注释中写清楚该class可能会具有的属性,这样就显得很清楚。

动态加载模块用的模块importlib 里面的import_module(“字符串模块路径”, 相对路径包名)

2.getattr(对象,“字符串属性”,默认值)

补充

任意创建一个文件夹,在里面同级创建f1-f4.py的四个文件。

内容如下:

f1.py

f2.py

f3.py

f4.py

f5.py

f4.py:通过动态导入模块,动态添加属性 删除。可以解决接口自动化中的动态传参

F5.py: 通过传参的方式,去获取类的实例方法,可以做到不知道需要哪个方法的时候,用字符串的方法去调用需要的方法。接口自动化中参数化的时候可以用到。

反射机制,当通过类名去反射得到的实例方法,需要传类名进去。通过self或者对象得到的实例方法,不需要传self或者类名。如果是实例对象或者类 去调用静态方法, 都不用给函数传self cls


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11535131.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存