簡體   English   中英

從對象創建python對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM