0

我对 Python 比较陌生,但已经喜欢它了。我正在开始我们的第一个 Python 项目,并且正在做一些原型设计。“Python 哲学”在类型和异常方面让我感到困惑。有人可以拍摄这段摘录吗?我是过度工程还是缺少一些基本的 Python 方法?

class URIPartError(Exception):
pass

class WCFClient(object):
def __init__(self, host, scheme='http', port=80, path='/', user=None, password=None):
    super(WCFClient, self).__init__()

    #Store our variables
    try:
        self.__host = str(host).lower()
        self.__scheme = str(scheme).lower()
        self.__port = int(port)
        self.__path = str(path)
        self.__user = str(user) if user else None
        self.__password = str(password) if password else None
    except (TypeError, ValueError), e:
        raise URIPartError('Invalid URI part')

    #Are our inputs valid?
    if not self.__scheme == 'http' and not self.__scheme == 'https':
        raise URIPartError('Invalid URI scheme')
    if not path.startswith('/') or not path.endswith('/'):
        raise URIPartError('Invalid URI path')

    #Generate valid URI for baseurl
    if (self.__scheme == 'http' and self.__port == 80) or (self.__scheme == 'https' and self.__port == 443):    
        self.__baseurl = '{0}://{1}{2}'.format(self.__scheme, self.__host, self.__path)
    else:
        self.__baseurl = '{0}://{1}:{2}{3}'.format(self.__scheme, self.__host, self.__port, self.__path)

def baseurl(self):
    return self.__baseurl

谢谢!

4

2 回答 2

2

就打字而言,这里没有错。您不是坚持类型,而是通过检查值来做正确的事情-如果用户传递了无效参数,则引发异常是完全有效的。

我要在这里做的唯一评论是,将“私有”双下划线变量与 getter 一起使用是非常不符合 Python 的。self.__baseurl与其设置然后提供baseurl()方法,不如self.baseurl直接设置。

于 2013-03-05T09:04:11.327 回答
0

看看你的WCFClient继承方式object(顺便说一句,只有在使用 Python 2.x 时才有意义,因为在 Python 3 中这是默认设置),调用object类的构造函数实际上没有意义。这意味着您可以删除该行

super(WCFClient, self).__init__()

其余的一切都很好:)

于 2013-03-05T09:04:01.680 回答