将字典参数发送到 class 内部调用的方法 __init__
Send dictionary parameters to class method called inside __init__
我想增强下面的人工例子
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
。
这里如何进行,一般来说,将方法嵌入到初始化中是否是一个正确的想法?
您不必创建字典来传递参数。这也行得通:
class Record:
def __init__(self, data, **args):
self.data = data
self.filter(**args)
def filter(self, positive=False, even=False):
...
f1 = Record(data) # both positive and even will be False
f2 = Record(data, positive=True)
f3 = Record(data, even=True)
f4 = Record(data, even=True, positive=True)
这有一个额外的好处,即您在整个代码中始终如一地对待 even
和 positive
,避免在某些时候必须将它们作为字符串引用。
我想增强下面的人工例子
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
。
这里如何进行,一般来说,将方法嵌入到初始化中是否是一个正确的想法?
您不必创建字典来传递参数。这也行得通:
class Record:
def __init__(self, data, **args):
self.data = data
self.filter(**args)
def filter(self, positive=False, even=False):
...
f1 = Record(data) # both positive and even will be False
f2 = Record(data, positive=True)
f3 = Record(data, even=True)
f4 = Record(data, even=True, positive=True)
这有一个额外的好处,即您在整个代码中始终如一地对待 even
和 positive
,避免在某些时候必须将它们作为字符串引用。