Python 有没有其他方法来创建';参数化';班
假设我有这样一门课:Python 有没有其他方法来创建';参数化';班,python,class,inheritance,Python,Class,Inheritance,假设我有这样一门课: A类(对象): 前缀=“1” text=“%s)某些文本“%s”前缀 现在我想创建一个前缀已更改的祖先 B(A)类: 前缀=“2” 其他字段=“其他文本” 但这不是我想要的 a=a() b=b() 打印一些文字 打印(b.text)#1)一些文本 我知道为什么。好吧,我知道怎么做了 #现在我们来看一些(并非真正)完全不同的东西。。。 def工厂(前缀): 类元(对象): text=“%s)某些文本“%s”前缀 返回元 A=工厂(前缀=“1”) B类(工厂(前缀=“2”
A类(对象):
前缀=“1”
text=“%s)某些文本“%s”前缀
现在我想创建一个前缀已更改的祖先
B(A)类:
前缀=“2”
其他字段=“其他文本”
但这不是我想要的
a=a()
b=b()
打印一些文字
打印(b.text)#1)一些文本
我知道为什么。好吧,我知道怎么做了
#现在我们来看一些(并非真正)完全不同的东西。。。
def工厂(前缀):
类元(对象):
text=“%s)某些文本“%s”前缀
返回元
A=工厂(前缀=“1”)
B类(工厂(前缀=“2”)):
其他字段=“其他文本”
a=a()
b=b()
打印一些文字
打印(b.text)#2)一些文本
…但我觉得这有点难看。
有没有更好的办法做这件事?还是我对丑陋的看法错了
我试过玩mixins,但运气不好
注意:由于某些原因,我无法在构造函数中初始化前缀,我只需要在类定义中参数化属性初始化(
\uuuuu get\uuuuu
方法-)就可以实现类似的功能:
印刷品:
1) some text
2) some text
1) some text
2) some text
您可以将属性
text
设置为属性(这是创建描述符的一种简单方法):
谢谢!我认为值得注意的是,对于python2
prefixed_text
,应该是一个新的样式类。
1) some text
2) some text
1) some text
2) some text
class A(object):
PREFIX = "1"
@property
def text(self):
return "%s) some text" % self.PREFIX
class B(A):
PREFIX = "2"
other_field = "other text"
a = A()
b = B()
print(a.text) # -> 1) some text
print(b.text) # -> 2) some text