2017-06-09 10 views
-3

私はPythonクラスを持っています。私は、属性のキー/値のペアを渡すか、内部的に解析されるエンコードされた文字列を渡すことによってインスタンスを作成する必要があります。クラスインスタンスをキー/値または文字列で初期化する

これは可能ですか?

更新

私は明確にしましょう。

class Foo(object): 
    def __init__(self, **kwargs): 
     # This will let me use key/value arguments 

    def __init__(self, data): 
     # This will let me use the whole data as a string 

私はこれら2つを組み合わせたいと思っています。

私はただ1つの引数を持つことができます。dictまたはstrになることができますが、キーワード引数は使用できません。

+1

どのようなクラスですか?どのような種類のキー/値ペアですか?それは可能かもしれませんが、多くの要因に依存しています... – zwer

答えて

0

は、私は私の答えはあまりにもなりますので、ご質問は、少し抽象的である、あなたができると思う:これは動作しないでしょう、なぜ私は表示されません

class PythonClass(): 
    def __init__(self, key_value = None, string_to_parse = None): 
    if key_value == None and string_to_parse != None: 
     (key,value) = string_to_parse.decode() #only you know how to extract the values from the string, so I used "decode" method to say something general, but you must use your method 
     self.key = key 
     self.value = value 
    if string_to_parse == None and key_value != None: 
     self.key = key_value[0] 
     self.value = key_value[1] 
1
class A(object): 

    def __init__(self, a): 
     self.x = a**2 
     self.y = a**3 

# initialize directly 
a = A(5) 
print("type: {}, x: {}, y: {}".format(type(a), a.x, a.y)) 
# type: <class '__main__.A'>, x: 25, y: 125 

# initialize with k/v arguments: 
data = {"x": 25, "y": 125} 

b = A.__new__(A) 
b.__dict__.update(data) 
print("type: {}, x: {}, y: {}".format(type(b), b.x, b.y)) 
# type: <class '__main__.A'>, x: 25, y: 125 
+0

どうして 'A(** data)'? –

+0

クラスの型を最初の引数として渡す必要があり、その他のクラスはクラス自体の中で上書きできます。これは、(卑劣な開発者が '__dict__'へのアクセスを部分的に抽象化することができたのと同じように)' __dict__'が何となく設定されることを保証します。 – zwer

+0

何ですか?いいえ、私は* __new__を全く使わないことを意味します* –

1

class Foo(): 
    def __init__(self, passedDictionary): 
     self.attribute1 = passedDictionary['attribute1_key'] 
     self.attribute2 = passedDictionary['attribute2_key'] 
     .... 

myDict = {"attribute1_key": 5, "attribute2_key": "attribute2_value", ...} 
a = Foo(myDict) 
関連する問題