2016-11-22 7 views
0

長い文字列があるので、それを解析して特定の値を取り出すことでオブジェクトを構築したいと思っていますが、文字列を渡す方法がわかりません私のクラスに。文字列をクラスに渡し、文字列から引っ張った情報からオブジェクトを作成し、それを返したいと思います。あなたのクラス宣言でPythonのオブジェクトクラスに文字列を渡す方法

class Customer(object): 

     def __init__(self, stringWithInfo): 
     self.name = re.search("'name': (.+?)',",stringWithInfo).group(1) 
     self.email = re.search("'email': (.+?)',",stringWithInfo).group(1) 
     self.number = re.search("'number': '(.+?)',",stringWithInfo).group(1) 

    def getName(self, name): 
     return self.name 

    def getEmail(self, email): 
     return self.email 

    def getNumber(self, number): 
     return self.number 
+0

あなたが「stringWithInfo」を置く場所は、オブジェクトのスーパークラスです。オブジェクトを初期化/作成する2つの方法を追加する場合は、* argsパラメーターを使用できます。 – ProgramFast

+1

私はあなたがオブジェクトの作成以外の文字列を解析し、後に値を渡すことをお勧めします。今のところ、オブジェクトを作成する唯一の方法は、長い文字列を渡すことです。 – chatton

答えて

0

私はあなたがこのような何かをしたいと思います。これはおそらくあなたが望むものではありません。クラスは引数を取らず、あなたが呼び出す関数ではありません(私は現時点でメタクラスを無視していますが、実際には関係ないので興味があれば参照できます)。


私は、クラスに文字列を渡す私は、文字列から引く情報からオブジェクトを構築し、それを返すようにしたいと思います。

最もクリーンな解決策は、通常は別のファクトリ関数またはクラスを書くことです。これは、あなたのクラスであるかどうかを文字列で表現する方法と、文字列を解析するために使用する機械(正規表現はここ)から分けるためです。

文字列を{'name': 'value'}の対に変換するために、より一般的なパーサを書くことができるようですが、ファクトリ関数は簡単になります。あなたが強く、同じクラスでこのすべてを維持することを好む場合

しかし、あなただけの静的メソッドを使用することができます。

class Customer(object): 
    def __init__(self, name, email, number): 
     self.name = name 
     self.email = email 
     self.number = number 

    @staticmethod 
    def fromString(s): 
     name = Customer.parseName(s) 
     email = Customer.parseEmail(s) 
     number = Customer.parseNumber(s) 
     return Customer(name, email, number) 

    @staticmethod 
    def parseName(s): 
     m = re.search("'name': '(.+?)',",s) 
     return m.group(1) 

    @staticmethod 
    def parseEmail(s): 
     m = re.search("'email': '(.+?)',",s) 
     return m.group(1) 

    @staticmethod 
    def parseNumber(s): 
     m = re.search("'number': '(.+?)',",s) 
     return m.group(1) 

(あなたのファクトリメソッドに注意してください、あなたがそれらを置くことを主張する場合、静的でなければなりませんクラスを呼び出すインスタンスがまだないため)。

あなたは次のようにそれを使用したい:

c = Customer.fromString("'name': 'bob', 'number': '1', 'email': 'nope', ") 
0

class Customer(stringWithInfo): 

あなたの基本クラスとしてstringWithInfoを指定している

class Customer(stringWithInfo): 

     def __init__(self, name, email, number): 

     self.name = name 
     self.email = email 
     self.number = number 

    def getName(self, name): 

     name = re.search("'name': '(.+?)',",stringWithInfo).group(1) 
     return self.name 

    def getEmail(self, email): 

     email = re.search("'email': '(.+?)',",stringWithInfo).group(1) 
     return self.email 

    def getName(self, number): 

     number = re.search("'number': '(.+?)',",stringWithInfo).group(1) 
     return self.number 
+0

私はこのルートに行く場合は、どのように長い文字列を解析するために渡すか? 'c = Customer.fromString(MylongString)' – WeVie

関連する問題