我想增強以下的人工實體
class Record。
def __init__(self, data):
self.data = data
def filter(self, positive = False, even = False)。
data_ = self.data
if positive:
data_ = [c for c in data_ if c> 0]
if even:
data_ = [c for c in data_ if c % 2 ==0]
self.data = data_
data = list(range(-5,10, 1)
record = Record(data)
record.filter(positive=True, even=True)
print(record.data)
這樣可以正確列印[2,4,6,8],這樣就可以在Record實體的初始化時要求過濾。我的方法是
class Record。
def __init__(self, data, filter = {}) 。
self.data = data
if len(filter) > 0:
self.filter(**filter)
def filter(self, positive = False, even = False) 。
data_ = self.data
if positive:
data_ = [c for c in data_ if c> 0]
if even:
data_ = [c for c in data_ if c % 2 ==0]
self.data = data_
data = list(range(-5,10, 1)
record = Record(data,filter={positive:True, even:True})
print(record.data)
而且(自然......)我得到了一個錯誤NameError: name 'positive' is not defined。
在這里如何進行,以及在一般情況下,將一個方法嵌入到初始化中是否是一個正確的想法?
uj5u.com熱心網友回復:
你不需要創建一個字典來傳遞引數。這樣做也可以:
class Record。
def __init__(self, data, **args)。
self.data = data
self.filter(**args)
def filter(self, positive=False, even=False)。
...
f1 = Record(data) # 正數和偶數都是假的。
f2 = Record(data, positive=True)
f3 = Record(data, even=True)
f4 = Record(data, even=True, positive=True)
這樣做還有一個好處,就是你在整個代碼中對even和positive的處理是一致的,避免了在某些地方將它們作為字串參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/332763.html
標籤:
