<p>当然,您可以手动将属性添加到类中,如下所示:</p>
<pre><code>def addToClass(cls, ClassId):
cls.Context = ClassId1+"CONTEXTSTR"
cls.SubContext = ClassId1+"SUBCONTEXTSTR"
cls.UpVal = ClassID+"UPVAL"
cls.DoenVal = ClassID1+"DOWNVAL"
class NewClass(MyClass):
...
</code></pre>
<p>用法:</p>
^{pr2}$
<p><em>但如果您认为这仍然过于“手动”,并且您希望像Python这样的优秀语言应该提供更多更好的功能,那么您是对的:<strong>元类</strong></em></p>
<h2>使用元类</h2>
<p>您可以使用元类来实现想要的行为(如果您不知道我在说什么,我建议您阅读本期文章中的最佳答案:<a href="https://stackoverflow.com/a/6581949/672848">What is a metaclass in Python?</a>)</p>
<p>编写元类工厂方法:</p>
^{3}$
<p>基于元类定义类:</p>
<pre><code>class MyClass1():
__metaclass__ = getMetaClass("test01")
</code></pre>
<p>使用你的课程:</p>
<pre><code>>>> A.Context
'test01CONTEXTSTR'
</code></pre>
<p><strong>更新</strong>:如果您不喜欢在每个类中都有这个<code>__metaclass__</code>,您可以将它隐藏在一个类似这样的超类中(Anders在评论中提出):</p>
<p>元类:</p>
<pre><code>class MyMetaClass(type):
def __new__(cls, name, bases, dct):
classId = dct.get("CLASSID", "noClassId")
dct["Context"] = "%sCONTEXTSTR" % classId
dct["SubContext"] = "%sSUBCONTEXTSTR" % classId
dct["UpVal"] = "%sUPVAL" % classId
dct["DownVal"] = "%sDOWNVAL" % classId
return super(MyMetaClass, cls).__new__(cls, name, bases, dct)
</code></pre>
<p>类隐藏元逻辑:</p>
<pre><code>class AutoContext:
__metaclass__ = getMetaClass()
</code></pre>
<p>用法:</p>
^{8}$