我正在尝试两个连接到类args一起制作另一个。下面的代码将Name
属性输出为tuple
而不是字符串。
# Person
class Person(ParentClass):
def __init__(self,
Collection = 'People',
Firstname = '',
Lastname = '',
Name = '',
**kwargs):
self.Collection = Collection
self.Firstname = Firstname
self.Lastname = Lastname
self.Name = '%s %s' % (self.Firstname, self.Lastname),
self.__dict__.update(kwargs)
p = Person(Firstname='Foo',Lastname='Bar') ## tuple, not string
p.Name = ('Foo', 'Bar')
我尝试加入__init__
中的名字和姓氏而不仅仅是属性的原因是因为__init__
与继承的save_to_database
方法相关联。我希望将Name
属性保存到数据库,但是作为字符串,不要作为元组保存。
任何线索都太棒了!
答案 0 :(得分:4)
删除尾随逗号。转过来......
self.Name = '%s %s' % (self.Firstname, self.Lastname),
进入这个:
self.Name = '%s %s' % (self.Firstname, self.Lastname)
(您实际上是self.Name = 'foo',
而不是self.Name = 'foo'
,而'foo',
是单元素元组,唯一的元素是字符串,而'foo'
只是一个字符串。)
答案 1 :(得分:0)
现在,您在构造函数运行后明确将p.Name设置为元组值。特别是,当你运行
时,p.Name会丢失你在构造函数中给出的格式p.Name = ("foo", "bar")
现在你的init函数几乎正确设置P.name。正如Amber指出的那样,你需要在self.Name = ...行上删除逗号。如果你解决了这个问题,并删除你改变self.Name值的代码的最后一行,我认为它会做你想做的一切。
答案 2 :(得分:0)
如果你想:
Name
保留为字符串,Name
,设置Firstname
和Lastname
并将更改保存到db,你应该重载该类的__setattr()__
方法。
以下是一个例子:http://code.activestate.com/recipes/389916-example-setattr-getattr-overloading/