私はこのタイトルを入力して自分自身を混乱させたので、何らかの説明が必要な場合はお知らせください。 私はPython Crash Courseを通してEric Matthesに挑戦しています。演習の1つは、私が答えを見つけることができなかったという質問をもたらしました。また、明らかに、私は次のコードを適切にフォーマットする方法を理解できません。問題の行使のための コードは次のとおりです。Python:異なるクラスのインスタンス内で作成されているクラスのインスタンスの属性に値を渡すにはどうすればよいですか?
class User():
"""Store info about a user profile"""
def __init__(self, first_name, last_name, email, username):
"""Init common profile info"""
self.first_name = first_name
self.last_name = last_name
self.email = email
self.username = username
self.login_attempts = 0
def describe_user(self):
"""Print users info"""
print("User info summary: \n\t" +
self.first_name.title() + " " +
self.last_name.title() + "\n\t" +
self.username + "\n\t" +
self.email
)
def greet_user(self):
"""Print a short greeting"""
print("Welcome, " + self.first_name.title() + "!")
def increment_login_attempts(self):
"""Increments the number of login attempts by 1"""
self.login_attempts += 1
def reset_login_attempts(self):
"""Rest value of login_attempts to 0"""
self.login_attempts = 0
class Privileges():
"""Represents a list of privileges"""
def __init__(self, privileges=[]):
"""Initialize attributes for Privileges"""
self.privileges = privileges
def show_privileges(self):
"""Print the list of privileges for this admin"""
for item in self.privileges:
print(item.title())
class Admin(User):
"""Model an administrative user"""
def __init__(self, first_name, last_name, username, email):
"""Initialize attributes of Admin"""
super().__init__(first_name, last_name, username, email)
self.privileges = Privileges(['can add user', 'can block user'])
bbob = Admin('billy', 'bob', 'bbob', 'blah')
bbob.privileges.show_privileges()
OKので、私は時間Iで、Admin
の内部で作成されていたクラスPrivileges
のインスタンスへの権限のリストを提供できるようにしたいのですがAdmin
のインスタンスを作成しています。これはすべて意味がありますか?私がそれを打つたびに私は混乱します。実際のアプリケーションでは、Admin
の__init__
メソッドのように、クラス定義にそのリストを指定するのは無理でしょう。それは、引数や何か、クラスとして渡すことができる必要がありますか?
ありがとうございました。これを読んでいただきありがとうございます。これが意味をなさないかどうか私に教えてください。
コードの書式を修正しました。正しくない場合は教えてください。 –
'def __init __(self、privileges = []):'を実行するのは良い考えではありません。デフォルトのargsは、関数やメソッドが呼び出されたときではなく、関数が定義されたときに評価されるため、明示的な 'privile'リストなしで作成されたすべての' Privileges'インスタンスはそのデフォルトリストを共有します。 https://stackoverflow.com/questions/1132941/least-astonishment-and-the-mutable-default-argumentを参照してください。これを処理する通常の方法は、argにデフォルト値の「None」を与え、本文に関数の何かが '特権がNoneならば何かをします:privileges = []' –
それはもっとよかったよ、ありがとう! – CCramer