0

私はPythonにはかなり慣れていませんが、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

ここではタイピングに関して何も問題はありません。型を主張しているのではなく、値をチェックすることで正確に正しいことを行っています。ユーザーが無効なパラメーターを渡した場合、例外を発生させることは完全に有効です。

ここで私がする唯一のコメントは、ゲッターと一緒に「プライベート」ダブルアンダースコア変数を使用することは非常に非Pythonicであるということです。メソッドを設定self.__baseurlして提供するのではなく、直接設定するだけです。baseurl()self.baseurl

于 2013-03-05T09:04:11.327 に答える
0

WCFClient継承元を見るとobject(Python 2.xを使用している場合にのみ意味があります。Python3ではこれがデフォルトであるため)、objectクラスのコンストラクターを呼び出すことは実際には意味がありません。これは、行を削除できることを意味します

super(WCFClient, self).__init__()

残りはすべて大丈夫です:)

于 2013-03-05T09:04:01.680 に答える