擅长:python、mysql、java
<p>您可以扩展Python内置类型,不过如果您不小心,可能会发现自己在处理一些奇怪的情况。例如:</p>
<pre><code>class MyStr(str):
def is_null_or_empty(self): # see PEP 8 for naming conventions
return not bool(self)
str1, str2 = MyStr("non-empty"), MyStr("")
print(str1.is_null_or_empty(), str2.is_null_or_empty())
</code></pre>
<p>应该打印</p>
<pre><code>False True
</code></pre>
<p>请注意,所有从基类(系统<code>str</code>类型)继承并返回字符串的方法将继续返回简单字符串,而不是<code>MyStr</code>实例。要让它们返回这样的实例,类需要包装每个这样的方法。以下是<code>upper</code>方法的示例:</p>
<pre><code>def upper(self):
return MyStr(super().upper())
</code></pre>
<p>这里<code>super().upper()</code>是对超类(<em>i,.e.)的调用</em>,<code>str</code>的<code>upper</code>方法,其中<code>self</code>作为当前实例(因此作为参数1传递给该方法)-它不能再简单地从<code>self</code>继承和引用,因为<code>upper</code>的<code>MyStr</code>定义将首先被解析,从而导致无限递归</p>