2017-09-20 6 views
-4

私はUserクラスを作成しています。このクラスの内部には、データの入力を求めるメソッドを作成します。 populate()メソッドでのinitパラメータを有効な値として使用するにはどうすればよいですか?ここで同じクラス内のメソッドの引数としてクラスパラメータを使用する

は私のコードです:

class User: 
def __init__(self, last_name, first_name, social, rep_code, data_source): 
    self.last_name = last_name 
    self.first_name = first_name 
    self.social = social 
    self.rep_code = rep_code 
    self.data_source = data_source 

def populate(self): 
    #prompt for user info and write to file 
    this.last_name = input("Please enter user last name:\n") 
    this.first_name = input("Please enter user first name:\n") 
    this.social = input("Please enter user social security number:\n") 
    this.rep_code = input("Please enter user rep code:\n") 
    this.data_source = input("Please choose the Data Source. Enter 6 for 
     NFS, 1 for DST, 2 for DAZL:\n") 

そして、私は(user1.populateとして、この方法を実行したい)

はありがとうございます。

+0

私はあなたがほとんどだと思いさておき移入 'で' self.'() ''にthis.'を変更するから、それを持っています。 – heyiamt

+0

ありがとう、私は入力メソッドinside__init__を持つことができますか? –

+0

どのクラスパラメータですか?インスタンス属性のみが表示されます。 https://docs.python.org/3/tutorial/classes.html#a-first-look-at-classes – wwii

答えて

0

これはあなたが探していたものですか?

class User: 
    def __init__(self, last_name, first_name, social, rep_code, data_source): 
     self.last_name = last_name 
     self.first_name = first_name 
     self.social = social 
     self.rep_code = rep_code 
     self.data_source = data_source 


    @staticmethod 
    def create(): 
     last_name = input("Please enter user last name:\n") 
     first_name = input("Please enter user first name:\n") 
     social = input("Please enter user social security number:\n") 
     rep_code = input("Please enter user rep code:\n") 
     data_source = input("Please choose the Data Source. Enter 6 for NFS, 1 for DST, 2 for DAZL:\n") 
     return User(last_name, first_name, social, rep_code, data_source) 

このコードは、あなたが質問を促すメッセージが表示されますUser.create()returnUserオブジェクトを呼び出すことができます。これはthisのコードとselfで置き換えられました。これは既存のUserオブジェクトを必要とせず、新しいオブジェクトを作成するためです。

使用法:

これを行う方法の例は、次のようなものです。

usr = User.create() 
print("First name: " + usr.first_name) 
print("Last name: " + usr.last_name) 
0

私はクラスの外でクエリを置く:

def query(): 
    attributes = {} 
    #prompt for user info and write to file 
    attributes['last_name'] = input("Please enter user last name:\n") 
    attributes['first_name'] = input("Please enter user first name:\n") 
    attributes['social'] = input("Please enter user social security number:\n") 
    attributes['rep_code'] = input("Please enter user rep code:\n") 
    attributes['data_source'] = input("Please choose the Data Source. Enter 6 for NFS, 1 for DST, 2 for DAZL:\n") 
    return attributes 

クラスは次のようになります。

class User: 
    def __init__(self, last_name, first_name, social, rep_code, data_source): 
     self.last_name = last_name 
     self.first_name = first_name 
     self.social = social 
     self.rep_code = rep_code 
     self.data_source = data_source 

使用方法:これを使用して

>>> attrs = query() 
Please enter user last name: 
q 
Please enter user first name: 
w 
Please enter user social security number: 
e 
Please enter user rep code: 
r 
Please choose the Data Source. Enter 6 for NFS, 1 for DST, 2 for DAZL: 
t 

>>> me = User(**attrs) 
>>> me.data_source 
't' 
>>> me.first_name 
'w' 
>>> me.last_name 
'q' 
>>> me.rep_code 
'r' 
>>> me.social 
'e' 
>>> 
+0

ありがとうございます。私はこれを試してみる。なぜattrsの前に二重*ですか? –

+0

https://docs.python.org/3/tutorial/controlflow.html#keyword-arguments - 第5段落について*は、キーワード引数のための辞書を提供している関数を指示します。 – wwii

+0

うわー、クール、タイ! –

0
class User: 
    def __init__(self): 

     #prompt for user info and write to file 
     self.last_name = input("Please enter user last name:\n") 
     self.first_name = input("Please enter user first name:\n") 
     self.social = input("Please enter user social security number:\n") 
     self.rep_code = input("Please enter user rep code:\n") 
     self.data_source = input(
     '''Please choose the Data Source. Enter 6 for 
      NFS, 1 for DST, 2 for DAZL:\n''') 

`` `

user = User()のようなコールは、端末のプロンプトを発行します。潜在的に有用な実装は、あなたがuser = User()で空白Userを初期化し、その後user.populate()でプロンプトを求めることができます

class User: 
    def __init__(
    self, last_name=None, first_name=None, social=None, 
    rep_code=None, data_source=None): 

     self.last_name = last_name 
     self.first_name = first_name 
     self.social = social 
     self.data_source = data_source 

    def populate(self): 
     #prompt for user info and write to file 
     self.last_name = input("Please enter user last name:\n") 
     self.first_name = input("Please enter user first name:\n") 
     self.social = input("Please enter user social security number:\n") 
     self.rep_code = input("Please enter user rep code:\n") 
     self.data_source = input(
     '''Please choose the Data Source. Enter 6 for 
      NFS, 1 for DST, 2 for DAZL:\n''') 

この方法だろう。

は(最初__init__の例を変更するように編集。)

関連する問題