[英]Creating python objects from objects
我需要編寫一個帶有一些原始字符串的類,然后將它們分成一個列表,它作為屬性保存。 (除此之外,但這是我現在關注的部分。)像這樣:
class MyClass(object):
def __init__(self, raw, index):
self.a = raw.split("\n")
self.index = index
所以MyClass的一個實例將有一個屬性.a,這是一個包含初始化對象的原始字符串中的行的列表,以及一個屬性.index,它是我給它的索引,對嗎? 但是,我還希望能夠生成MyClass的其他實例,每個實例只包含一行原始文本,但擁有相同的索引。
我目前正在考慮的是:
from copy import deepcopy
foo = MyClass("lots of text", 1)
bar = []
for line in foo.a:
copy = deepcopy(MyClass)
copy.a = line
bar.append(copy)
這是正確的方法嗎?
字符串存儲在實例foo
而不是MyClass
類中,因此您需要for line in foo.a
。 除此之外,您的解決方案應該有效。
另一種解決方案是:
for line in foo.a:
bar.append(MyClass(line, foo.index))
或者,簡單地使用列表理解,這在我看來最pythonic:
bar = [ MyClass(line, foo.index) for line in foo.a ]
(你原來的解決方案還有一件事,就是它可能是低效的,如果foo.a
是巨大的,因為你犯了一個deepcopy
它,當你真正需要的是一個單行一次復制。)
編輯:要完成此答案,請考慮您要子類MyClass
,並將子類的實例分配給foo
。 在這種情況下,使用deepcopy
將保留類型,而顯式實例化MyClass
不會。 一個修復方法是用type(foo)(...)
替換MyClass(...)
type(foo)(...)
。
從非OOP的角度來看,您可以簡單地使用tuple
並獲得相同的bar
值。
from copy import deepcopy
foo = ('lots of text', 1)
bar = deepcopy(foo[0].split('\n'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.