2012年02月25日 星期六 16:53
个人认为python对函数输入变量的管理已经很好用了,但是,初学面向对象我就遇到个烦恼的事:
根源:对象的创建可能会有许多不同的方式,不同构造方式之间可能是相互冲突或包含的。
例如创建对象P,有很多不同的构造方式(如A、B...)。假设在方式A下其构造函数的输入参数可定义为(a,b=x);而在方式B下其构造函数的输入参数可定义为(c,d=y);......
如果我要在一个构造函数中实现所有的构造方式就可能要这样的输入参数(a,c,...,b=x,d=y,...)——问题出现了!因为有不同的构造方式,因此对于a,c这样参数,在创建对象实例时,我必须使用a=*,c=*的方式,而且如果a输入,那么c和d都是无用的参数(假设A和B两中构造方式是冲突的,或者A包含了B)
总之,如果是在同一个构造函数中要实现不同的构造方式,那么函数内部好像不可避免地必须用许多条件判断语句,python语言对这个问题是这么解决的吗?
2012年02月25日 星期六 18:01
Python的解决方案就是用缺省值和条件判断。或者不用__init__,而给P创建几个静态函数或者类方法专门用来创建。例如:
from math import sin, cos
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
@classmethod
def from_polar(cls, r, theta):
x = r*cos(theta)
y = r*sin(theta)
return cls(x, y)
def __str__(self):
return "Point(%g, %g)" % (self.x, self.y)
print Point(1, 2)
print Point.from_polar(3, 0.1)
Zeuux © 2024
京ICP备05028076号