大佬教程收集整理的这篇文章主要介绍了类声明后将类成员变成对象成员,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
通常在类内部初始化类成员(而不是在构造函数中)并通过 @H_80_3@myClass.mymember 而不是 self.mymember
引用它们。
但是我注意到我实际上可以稍后通过 self.mymember
引用该成员。此外,我什至可以覆盖它。这有一个非常奇怪的效果,类成员变成了实例成员。
此效果可以在以下代码中看到,其中 property_cache
为 @H_80_3@myClass。
在这种情况下它真的很有帮助,因为现在对象 property_cache
(不是类 PropertyCache
!)可以用作装饰器并且它是一个实例成员@H_80_3@myclass 的(不是 @H_80_3@myClass 的班级成员!)。
但是,声明@H_80_3@myClass后,类成员变成实例成员的效果非常出乎意料。我什至不认为这样的事情是可能的,我不太了解这个机制。
有人可以对此有所了解并可能参考一些有关此的文献吗?我在python的文档中没有找到说明。
class PropertyCache:
def __init__(self):
self.cache = {}
def reset(self):
self.cache = {}
def __call__(this,function):
def wrapper(self,*args,**kwargs):
if function.__qualname__ not in self.property_cache.cache:
self.property_cache.cache[function.__qualname__] = function(self,**kwargs)
return self.property_cache.cache[function.__qualname__]
return wrapper
class MyClass:
property_cache = PropertyCache()
def __init__(self,parameter):
self.parameter = parameter
self.property_cache = PropertyCache()
def fit(self,data):
print('fit')
self.intermediate_data_ = data + self.parameter + 2
self.property_cache.reset()
return self
@property
@property_cache
def trans1(self):
print('trans 1')
return self.intermediate_data_ / self.parameter / 2
@property
@property_cache
def trans2(self):
print('trans 2')
return self.intermediate_data_ / self.parameter / 5
myclass = MyClass(2)
myclass.fit(10)
myclass.trans1
myclass.trans1
myclass.trans2
myclass.fit(15)
myclass.trans1
myclass.trans1
myclass.trans2
myclass2 = MyClass(3)
myclass2.fit(15)
myclass2.trans2
myclass2.trans2
myclass.trans2
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的类声明后将类成员变成对象成员全部内容,希望文章能够帮你解决类声明后将类成员变成对象成员所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。