如何在Python中最好地实现这个Ruby代码
Ruby代码:如何在Python中最好地实现这个Ruby代码,python,ruby,multiple-inheritance,mixins,Python,Ruby,Multiple Inheritance,Mixins,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
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中使用过混合或多重继承,所以这正是我放在一起的东西,所以我只想知道这是做我想做的事情的Pythonic方法,还是有一种更干净的编写方法。你至少应该更喜欢使用magic
\uu str\uuuu
方法,而不是遵循Ruby的命名约定。使用格式的字符串插值与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类上使用\uuuuu init\uuuuuuuuuuuuu
方法。您至少应该更喜欢使用magic\uuuu str\uuuuuuuuuuuuuuu
方法,而不是遵循Ruby的命名约定。使用格式的字符串插值与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类上使用\uuuu init\uuuu
方法。我不能评论Python代码,但Ruby代码很糟糕to_f
应该返回一个浮点值
,而不是文件
,而且它肯定不会有任何副作用!另外,self
是多余的。我从一本书lol中得到了ruby代码,它只是显示混合的示例代码,我认为这不是什么有意义的东西。我不能对Python代码发表评论,但ruby代码很糟糕to_f
应该返回一个浮点值
,而不是文件
,而且它肯定不会有任何副作用!另外,self
是多余的。我从一本书lol中得到了ruby代码,它只是显示混合的示例代码,我认为这不是什么有意义的东西。我不能对Python代码发表评论,但ruby代码很糟糕to_f
应该返回一个浮点值
,而不是文件
,而且它肯定不会有任何副作用!另外,self
是多余的。我从一本书lol中得到了ruby代码,不过它只是显示混合的示例代码,我认为这并不是什么有意义的东西。@steenslag。我想你是对的,我以为OP意味着它会出现在输出中,但它与Ruby版本不匹配。@steenslag。我想你是对的,我以为OP意味着它会出现在输出中,但它与Ruby版本不匹配。@steenslag。我认为你是对的,我认为OP意味着它会出现在输出中,但是它与Ruby版本不匹配。