首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python速成班(第二版)练习9-8

Python速成班(第二版)练习9-8
EN

Stack Overflow用户
提问于 2021-01-01 15:37:59
回答 3查看 344关注 0票数 0

关于Python速成班(第二版)中练习9-8的解决方案,我有一个问题。这些守则如下:

代码语言:javascript
复制
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(f"\n{self.first_name} {self.last_name}")
        print(f"  Username: {self.username}")
        print(f"  Email: {self.email}")
        print(f"  Location: {self.location}")

    def greet_user(self):
        """Display a personalized greeting to the user."""
        print(f"\nWelcome back, {self.username}!")

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(f"- {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()

我的问题是关于第二行。我理解第一个“特权”指的是类Admin中的实例。那么,第二个“特权”呢?

事先非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-01 15:45:56

要回答您的问题,是因为Admin包含self.privileges = Privileges(),然后Privileges类再次包含self.privileges = privileges

我不知道他们为什么要这样安排。这段代码有点粗略。仅Privileges类就有多个奇怪的东西:

你不需要class Privileges():.

  • Why甚至有类?它所做的只是提供一种方法。该方法可以很容易地成为Admin的方法,或者作为接受admin.privileges作为参数的独立函数。它没有封装任何东西,所以它实际上只是使代码变得比它所需要的更复杂。

我会谨慎地听取这个消息来源的建议。

票数 1
EN

Stack Overflow用户

发布于 2021-01-01 15:44:44

类管理有一个属性self.privileges,它是类特权的对象。类特权还有一个名为self.privileges的属性。

类管理,属性特权->类特权,属性特权

eric.privileges.privileges = eric_privileges

票数 0
EN

Stack Overflow用户

发布于 2021-01-01 15:46:29

代码语言:javascript
复制
class Privileges():
    """A class to store an admin's privileges."""

    def __init__(self, privileges=[]):
        self.privileges = privileges

不知道为什么但是在想这行代码,

在文件末尾添加此内容

代码语言:javascript
复制
print('***************')
for property, value in vars(eric).items():
    print(property, ":", value)
print('***************')

print(type(eric.privileges))
print(eric.privileges)
print('id : ',id(eric.privileges))
for property, value in vars(eric.privileges).items():
    print(property, ":", value)
print('***************')
print(type(eric.privileges.privileges))
print(eric.privileges.privileges)
print('id : ',id(eric.privileges.privileges))

给予:

代码语言:javascript
复制
***************
first_name : Eric
last_name : Matthes
username : e_matthes
email : e_matthes@example.com
location : Alaska
login_attempts : 0
privileges : <__main__.Privileges object at 0x7fd795456be0>
***************
<class '__main__.Privileges'>
<__main__.Privileges object at 0x7fd795456be0>
id :  140563899050976
privileges : ['can reset passwords', 'can moderate discussions', 'can suspend accounts']
***************
<class 'list'>
['can reset passwords', 'can moderate discussions', 'can suspend accounts']
id :  140563932329856

我猜这两种特权是相关的,但略有不同。

根据答案之一:正如一个:类管理有一个属性self.privileges,它是类特权的一个对象。类特权还有一个名为self.privileges的属性。类管理,属性特权->类特权,属性特权eric.privileges.privileges = eric_privileges

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65531065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档