Python 3.x 在初始化时从单个属性初始化多个属性
我有这样一门课:Python 3.x 在初始化时从单个属性初始化多个属性,python-3.x,Python 3.x,我有这样一门课: 类行: 定义初始化(self,文本:str): self.text=文本 在我的例子中,一行可以有许多特性。比如说, 如果该行超过50个字符,则认为该行较长 如果行具有非ascii字符,则标志设置为非ascii=真 等等 查找行中的所有URL 我能够用类方法实现它们: 类行: 定义初始化(self,文本:str): self.text=文本 def是_ascii(自身): #退票 def长(自身): #退票 def URL(自): #查找并返回URL 我的问题是,我需要在过
类行:
定义初始化(self,文本:str):
self.text=文本
在我的例子中,一行可以有许多特性
。比如说,
类行:
定义初始化(self,文本:str):
self.text=文本
def是_ascii(自身):
#退票
def长(自身):
#退票
def URL(自):
#查找并返回URL
我的问题是,我需要在过程的不同阶段多次对Line对象进行方法调用(有些方法调用的计算量很大)
我想要的是,在初始化时,我希望Line对象有一些属性,比如is_ascii,is_long,URL要预先填充,这样就可以多次访问它们,而无需每次访问时都计算它们
类行:
定义初始化(self,文本:str):
self.text=文本
self.is_ascii=对self.text进行一些处理,并赋值
self.is_long=对self.text进行一些处理,并赋值
self.url=对self.text进行一些处理,并赋值
我不确定在init块中存在所有逻辑是否有意义。我如何以“pythonic”的方式实现这一点?您可以使用您所使用的方法,并从
\uuuuuu init\uuuuu
中调用它们:
class Line:
def __init__(self, text: str):
self.text = text
self.is_ascii = self.calc_is_ascii(self.text)
self.is_long = self.calc_is_long(self.text)
self.urls = self.calc_urls(self.text)
def calc_is_ascii(self):
# check and return
def calc_is_long(self):
# check and return
def calc_urls(self):
# find and return urls
您也可以使用它,因此如果调用了一个方法,它会检查值是否已经计算,并使用缓存的值,否则它会计算并缓存它:
class Line:
def __init__(self, text: str):
self.text = text
self.is_ascii = None
self.is_long = None
self.urls = None
def calc_is_ascii(self):
if self.is_ascii is None:
# Do expensive calculation of self.is_ascii
self.is_ascii = expensive_result
# Use the cached, previously calculated value
return self.is_ascii
# Then the same pattern for other methods
这样做的好处是,如果不需要某个属性,那么计算该属性的工作就不会完成
我正在将属性初始化为
None
。如果以后它们是None
,我知道它们还没有计算出来。如果它们不是None
,我知道它们已经计算过了,所以我可以返回计算结果。当然,这假设None
不是有效值。@Carcigenicate:谢谢您的回复。如果可能的话,你能展示一下缓存是如何工作的吗?我对Python不是很精通。