Проверте прошу задачу по Полиморфизму

santasii

Новичок
Пользователь
Апр 4, 2022
26
0
1
Код:
#1. Написать класс User, у него будут в конструкторе определяться поля age, name, user_type,
#а метод будет access_database.
#2. Сделать метод таким, чтобы если self.user_type был равен “superuser”, то метод выводил в
#консоль “access granted”, в случае если это просто юзер, то выводило “access denied”.
#3. Для суперюзера сделать унаследованный класс SuperUser от User.

class User:
    def __init__(self, age, name, user_type):
        self._age = age
        self._name = name
        self._user_type = user_type
    
    def access_database(self):
        if self._user_type == 'superuser':
            print('access granted')
        elif self._user_type == 'access denied':
            print('access denied')
        else:
            print('...')

user = User(age=22, name='Sanye', user_type='superuser')
user.access_database()

class SuperUser(User):
    def access_database(self):
        pass

s = SuperUser(age=22, name='Sanye', user_type='superuser')
s.access_database()
 

troliche

Новичок
Пользователь
Май 31, 2022
1
0
1
Код:
#1. Написать класс User, у него будут в конструкторе определяться поля age, name, user_type,
#а метод будет access_database.
#2. Сделать метод таким, чтобы если self.user_type был равен “superuser”, то метод выводил в
#консоль “access granted”, в случае если это просто юзер, то выводило “access denied”.
#3. Для суперюзера сделать унаследованный класс SuperUser от User.

class User:
    def __init__(self, age, name, user_type):
        self._age = age
        self._name = name
        self._user_type = user_type
   
    def access_database(self):
        if self._user_type == 'superuser':
            print('access granted')
        elif self._user_type == 'access denied':
            print('access denied')
        else:
            print('...')

user = User(age=22, name='Sanye', user_type='superuser')
user.access_database()

class SuperUser(User):
    def access_database(self):
        pass

s = SuperUser(age=22, name='Sanye', user_type='superuser')
s.access_database()
у тебя пару ошибок:
смотри у тебя 2 класа и у них значение одинаковое user_type='superuser'
потом ты в класе class SuperUser(User) начал переопределять функцию и она у тебя не работает так как ты переопределил ее заглушкой
Код:
# 
class User:
    def __init__(self, age, name, user_type):
        self.__age = age
        self.__name = name
        self.__user_type = user_type

    def access_database(self):
        if self.__user_type == "superuser":
            print("access granted")
        elif self.__user_type == "user":
            print("access denied")


user = User(age=22, name='Sanye', user_type='user')
user.access_database()


class SuperUser(User):
    pass


s = SuperUser(age=23, name='Alosha', user_type='superuser')
s.access_database()

должно быть как то так
 

rccp

Новичок
Пользователь
Май 12, 2022
13
2
3
Так:
Python:
class User:
    def __init__(self, age, name):
        self.age = age
        self.name = name
        self.user_type = self.__class__.__name__.lower()
       
    def access_database(self):
        print('access denied')


class SuperUser(User):
     
    def access_database(self):
        print('access granted')

Или так:

Python:
class User:
    def __init__(self, age, name):
        self.age = age
        self.name = name
        self.user_type = self.__class__.__name__.lower()
       
    def access_database(self):
        if self.user_type == 'user':
            print('access denied')
        elif self.user_type == 'superuser':
            print('access granted')

class SuperUser(User):
    pass

Ну или так (следование принципа Single responsibility):

Python:
class UserAccess:
    def access_database(self):
        if self.user_type == 'user':
            print('access denied')
        elif self.user_type == 'superuser':
            print('access granted')

class User(UserAccess):
    def __init__(self, age, name):
        self.age = age
        self.name = name
        self.user_type = self.__class__.__name__.lower()


class SuperUser(User):
    pass
 
-1

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
если работает так, как вы ожидали, значит нормально...
 

Форум IT Специалистов