
关于python动态添加属性和方法的意义
添加属性以后,该属性在原来类里没有,又不能和原来的组合使用,改变原来内部结构,而且一般的属性和方法它只能属于创建它的对象,又不是共有的。通过类创建属性可以共有吗?如果添加...
添加属性以后,该属性在原来类里没有,又不能和原来的组合使用,改变原来内部结构,而且一般的属性和方法它只能属于创建它的对象,又不是共有的。通过类创建属性可以共有吗?
如果添加方法的话,完全可以在方法内部创建该属性。比起这样动态添加,一开始就写入类里,不是更好。我想不通的是:他们的意义在哪,一般什么时候会用到这些。 展开
如果添加方法的话,完全可以在方法内部创建该属性。比起这样动态添加,一开始就写入类里,不是更好。我想不通的是:他们的意义在哪,一般什么时候会用到这些。 展开
3个回答
展开全部
通过对象的实例,在外部为其添加属性,这种做法应该是很少见的。原因很简单:破坏封装。虽然Python可以做到,但并不代表随意使用这种做法是妥当的。
添加的属性可以和原有的组合使用的,有回答已经给出了例子。
我觉得有必要提一下self或者说方法的第一个参数是什么。
图片可以看出,self其实不像C++或Java中的this。其实它只是个名字,是个参数。你完全可以取任何合法的变量名。当然,不建议使用self以外的变量名。
其次,self实际上就是实例的引用,和实例化并赋值到t的对象是同一个。这一定程度上可以解释为什么外部可以为实例创建属性。因为在__init__方法中通过self创建属性(self.val = 0)和通过外部引用创建属性(t.val = 0)没有本质区别。
至于“通过类创建属性”,这种做法是可以达到共有的:
需要注意的是,通过实例为类属性赋值[7],会“遮盖”类属性。即,赋值只是为实例的属性赋值,而未改动类的属性。需要改动类属性的话,应该使用类名的方式。
感兴趣的话可以查查Python的Mixin,这是通过动态继承添加属性和方法的做法。
2019-07-25 · 知道合伙人软件行家
关注

2019-08-05 · IT职业教育领导品牌
AAA软件教育隶属于河南梦工厂教育信息咨询有限公司,从事高端计算机职业教育工作,是国内知名的教育品牌。自07年创建以来,依托先进的办学理念,AAA培养出了数万名专业型、实战型高端技术人才。
向TA提问
关注

展开全部
python是当下十分火爆的编程语言,尤其在人工智能应用方面。如果有心从事编程方向的工作,最好到专业机构深入学习、多实践,更贴近市场,这样更有利于将来的发展。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |