【发布时间】:2018-01-10 14:47:24
【问题描述】:
我很好奇是否有更好的方法来实现这样的目标? 我的意图是避免不必要的样板。提供的示例显然很简单,足以让其他人理解我的想法。
def create_parametrized_class(animal):
class SomeClass:
def __init__(self, name):
self.name = name
def __str__(self):
return "{}: {}".format(animal, self.name)
return SomeClass
class Cat(create_parametrized_class("Cat")):
pass
class Dog(create_parametrized_class("Dog")):
pass
cat = Cat("Micka")
dog = Dog("Rex")
assert str(cat) == "Cat: Micka", "Cats..."
assert str(dog) == "Dog: Rex", "Dogs..."
【问题讨论】:
-
这是什么 Python 版本?看起来像 3.6+,因为 Martijn Pieters 的回答就足够了,但你应该为可能遇到同样问题的其他人标记它。
__init_subclass__在 3.6 之前无法使用。 -
好的,我添加了 Python 3.6 标签。我不知道 init_subclass 所以我不确定它是什么 Python 版本。
-
你应该总是用你正在使用的版本标记它,这样人们就可以根据它提供答案。您可以使用
python --version或python3 --version查看版本 -
嗯,我知道我使用的是什么版本 :) 问题是我不希望解决方案是 3.6 特定的。但由于我使用的是 3.6,所以我不介意。不过还是谢谢你的提示。
标签: python inheritance python-3.6