如何在 Python 中最好地实现此 Ruby 代码
How to best implement this Ruby code in Python
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 做事的方式我想要或者有没有更简洁的写法。
您至少应该更喜欢使用神奇的 __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__
方法
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 做事的方式我想要或者有没有更简洁的写法。
您至少应该更喜欢使用神奇的 __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__
方法