访问 class 中的属性
Accessing Attributes in a class
我是试图理解 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', 'e_matthes@example.com', '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
非常感谢您对此的看法。非常感谢
关于行 eric.privileges.privileges = eric_privileges
...
class Privileges
和一个名为 privileges
的 class 变量似乎确实令人困惑。这可能暗示 class 并不是真正需要的。那么一种可能性是:
1.删除 class Privileges
如果特权是特定于管理员的 - 即假设代码的其他部分不再使用特权功能 - 为什么不使用列表来存储所有特权? show_privileges()
方法可以移至 Admin
class 或成为一个独立的函数。第二种选择 - 以及通常适度使用 classes - 通常会导致代码更易于维护和测试。
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', 'e_matthes@example.com', '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)
也许将特权存储在单独的文件中确实有意义
class(例如,它应该存储更多变量并提供更多功能)。在这种情况下,当前名称可能不是表示 class 的最佳选项。所以另一种可能是:
2。重命名 class Privileges
如果 class 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()
我是试图理解 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', 'e_matthes@example.com', '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
非常感谢您对此的看法。非常感谢
关于行 eric.privileges.privileges = eric_privileges
...
class Privileges
和一个名为 privileges
的 class 变量似乎确实令人困惑。这可能暗示 class 并不是真正需要的。那么一种可能性是:
1.删除 class Privileges
如果特权是特定于管理员的 - 即假设代码的其他部分不再使用特权功能 - 为什么不使用列表来存储所有特权? show_privileges()
方法可以移至 Admin
class 或成为一个独立的函数。第二种选择 - 以及通常适度使用 classes - 通常会导致代码更易于维护和测试。
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', 'e_matthes@example.com', '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)
也许将特权存储在单独的文件中确实有意义 class(例如,它应该存储更多变量并提供更多功能)。在这种情况下,当前名称可能不是表示 class 的最佳选项。所以另一种可能是:
2。重命名 class Privileges
如果 class 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()