我是嘗試理解 OOP 概念的編碼新手。最近我遇到了一個代碼并且努力理解一些行
class User():
"""Represent a simple user profile."""
def __init__(self, first_name, last_name, username, email, location):
"""Initialize the user."""
self.first_name = first_name.title()
self.last_name = last_name.title()
self.username = username
self.email = email
self.location = location.title()
self.login_attempts = 0
def describe_user(self):
"""Display a summary of the user's information."""
print("\n" self.first_name " " self.last_name)
print(" Username: " self.username)
print(" Email: " self.email)
print(" Location: " self.location)
def greet_user(self):
"""Display a personalized greeting to the user."""
print("\nWelcome back, " self.username "!")
def increment_login_attempts(self):
"""Increment the value of login_attempts."""
self.login_attempts = 1
def reset_login_attempts(self):
"""Reset login_attempts to 0."""
self.login_attempts = 0
class Admin(User):
"""A user with administrative privileges."""
def __init__(self, first_name, last_name, username, email, location):
"""Initialize the admin."""
super().__init__(first_name, last_name, username, email, location)
# Initialize an empty set of privileges.
self.privileges = Privileges()
class Privileges():
"""A class to store an admin's privileges."""
def __init__(self, privileges=[]):
self.privileges = privileges
def show_privileges(self):
print("\nPrivileges:")
if self.privileges:
for privilege in self.privileges:
print("- " privilege)
else:
print("- This user has no privileges.")
eric = Admin('eric', 'matthes', 'e_matthes', '[email protected]', 'alaska')
eric.describe_user()
eric.privileges.show_privileges()
print("\nAdding privileges...")
eric_privileges = [
'can reset passwords',
'can moderate discussions',
'can suspend accounts',
]
eric.privileges.privileges = eric_privileges
eric.privileges.show_privileges()
下面這行看起來很混亂。如果您能提出更好的編碼方式,我歡迎您的反饋
eric.privileges.privileges = eric_privileges
我非常感謝您對此的想法。非常感謝
uj5u.com熱心網友回復:
關于線路eric.privileges.privileges = eric_privileges...
有一個Privileges只有一個名為 的類變數的類似乎確實令人困惑privileges。這可能暗示該類并不是真正必需的。那么一種可能性是:
1.刪??除類 Privileges
如果權限是特定于管理員的 - 即假設在代碼的其他部分不再使用權限功能 - 為什么不使用串列來存盤所有權限?該show_privileges()方法可以移動到Admin類中,也可以是一個獨立的函式。第二種選擇 - 以及一般適度使用類 - 通常會導致代碼更易于維護和測驗。
class Admin(User):
def __init__(self, first_name, last_name, username, email, location):
super().__init__(first_name, last_name, username, email, location)
self.privileges = []
def show_privileges(privileges):
print("\nPrivileges:")
if privileges:
for privilege in privileges:
print("- " privilege)
else:
print("- This user has no privileges.")
eric = Admin('eric', 'matthes', 'e_matthes', '[email protected]', 'alaska')
eric.describe_user()
print_privileges(eric.privileges)
print("\nAdding privileges...")
eric_privileges = [
'can reset passwords',
'can moderate discussions',
'can suspend accounts',
]
eric.privileges = eric_privileges
show_privileges(eric.privileges)
也許將特權存盤在單獨的類中確實有意義(例如,它應該存盤更多變數并提供更多功能)。在這種情況下,當前名稱可能不是代表類的最佳選擇。所以另一種可能是:
2. 重命名類 Privileges
如果Privileges需要該類,也許重命名它會有助于澄清事情。例如,呼叫它PrivilegeHandler(或背景關系中其他合適的方法)將導致:
class Admin(User):
def __init__(self, first_name, last_name, username, email, location):
super().__init__(first_name, last_name, username, email, location)
self.privilege_handler = PrivilegeHandler()
class PrivilegeHandler:
def __init__(self, privileges=[]):
self.privileges = privileges
# ...
def add_privileges(self, new_privileges):
self.privileges.extend(new_privileges)
def show_privileges(self):
print("\nPrivileges:")
# ...
# ...
eric.privilege_handler.add_privileges(eric_privileges)
eric.privilege_handler.show_privileges()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/356503.html
下一篇:交換兩個實體的屬性
