Ruby代码:
module ToFile
def filename
"object_#{self.object_id}.txt"
end
def to_f
File.open(filename, 'w') { |f| f.write(to_s) }
end
end
class Person
include ToFile
attr_accessor :name
def initialize(name)
@name = name
end
def to_s
name
end
end
我的Python代码
class ToFile:
def __init__(self):
self.filename = "object_#{0}.txt".format(id(self))
def to_f(self):
with open(self.filename, 'w') as f:
f.write(self.to_s())
class Person(ToFile):
def __init__(self, name):
super().__init__()
self.name = name
def to_s(self):
return self.name
我之前从未在python中使用过mixins或多继承,所以这就是我放在一起所以我只是想知道这是做我想要的Pythonic方式还是有更简洁的方法来写这个
答案 0 :(得分:0)
您至少应该使用magic __str__
方法而不是遵循Ruby的命名约定。使用format
的字符串插值与Ruby完全不同,但在这种情况下删除#
将等效地工作
class ToFile:
def __init__(self):
self.filename = "object_{0}.txt".format(id(self))
def to_f(self):
with open(self.filename, 'w') as f:
f.write(str(self))
class Person(ToFile):
def __init__(self, name):
super().__init__()
self.name = name
def __str__(self):
return self.name
to_f
也应该重命名为write_to_file
或其他内容。
我也避免在mixin类上使用__init__
方法。