擅长:python、mysql、java
<p>您必须重写{new}方法,因为{init}不能返回任何值,也可以使用<a href="https://docs.python.org/2/library/functions.html#type" rel="nofollow noreferrer">type</a>函数动态构造新类:</p>
<pre><code>class Shapes(object):
def __new__(cls, class_name):
def default_init(self, color, surf_area):
self.color = color
self.surf_area = surf_area
return type(class_name, (Shapes,),
{'__init__': default_init, '__new__': super(Shapes,
cls).__new__})
# Usage:
Circle = Shapes('Circle')
Tommy = Circle('blue', 78.5398163397)
print vars(Tommy)
# {'color': 'blue', 'surf_area': 78.5398163397}
</code></pre>
<p>或者,可以使用通过键指向类的类继承和映射字典来实现相同的行为,但不需要动态创建类:</p>
<pre><code>class Shape(object):
""" Base class for shapes. """
pass
class Circle(Shape):
def __init__(self, color, surf_area):
self.color = color
self.surf_area = surf_area
class Triangle(Shape):pass
shapes = {
'circle': Circle,
'triangle': Triangle,
}
circle = shapes['circle']('blue', 78.5398163397)
</code></pre>