Member 14036261 Ответов: 2

Как создать макет раздела комментариев?


import datetime
class user:
  def __init__(self, name):
    self.name = name
  
  def name(self):
    return self.name
  
  def name(self, value):
    self.name = value
  
  def is_logged_in(self):
  
  def last_logged_in_at(self):
  
  def log_in(self):
  
  def log_out(self):
  
  def can_edit(self, comment):
  
  def can_delete(self, comment):
  
  def to_string(self):
    
class moderator():
  def __init__(self, name):

class admin():
  def __init__(self, name):

class comment:
  def __init__(self, author, message, replied_to):
    
  def author(self):
  
  def author(self, value):
    
  def message(self):
  
  def message(self, value):
    
  def created_at(self):
  
  def replied_to(self):
  
  def replied_to(self, value):
  
  def to_string(self):




Object Oriented Tests
For this challenge, you are going to build a mock comments section.

Design

We're going to focus on two aspects:

Users

Users come in 3 flavors, normal users, moderators, and admins. Normal users can only create new comments, and edit the their own comments. Moderators have the added ability to delete comments (to remove trolls), while admins have the ability to edit or delete any comment.
Users can log in and out, and we track when they last logged in
Comments

Comments are simply a message, a timestamp, and the author.
Comments can also be a reply, so we'll store what the parent comment was.
Your Challenge

This is challenge is not about building a fully functional API, but more about focusing on the design from an object-oriented point-of-view.

We've provided the basic API (which is incomplete), which we would like you to complete being aware of the following Object-Oriented Programming concepts:

Encapsulation of Properties

All classes should have no publicly accessible fields
You should make sure you at least "hide" the required fields, for example, using _name instead of _name. Alternatively, feel free to use a better solution as extra credit.
The method-based API is provided. These must be completed as-is.
Additional methods are allowed, though remember to keep read-only properties read-only.
Instantiation

Classes should be instantiated with properties (as provided), to create instances with values already assigned.
User/Moderator/Admin defaults:
Should be marked as not logged in
Should return None for the last logged in at property
Comment defaults:
Should set the current timestamp for the created at property upon instantiation
Replied To is optional, and should be None if not provided.
Inheritance & Access Control

Note: for the sake of simplicity, you can simply treat object equality as "equal", though more complete solutions will also pass.

User
Users can be logged in and out.
When logging in, set the last_logged_in_at timestamp. Do not modify this timestamp when logging out
Users can only edit their own comments
Users cannot delete any comments
Moderator is a User
Moderators can only edit their own comments
Moderators can delete any comments
Admin is both a User and a Moderator
Admins can edit any comments
Admins can delete any comments
Composition

Comments contain a reference to the User who created it (author)
Comments optionally contain a reference to another comment (replied_to)
When converting to a string (to_string), the following format is used:
No replied to:
message + " by " + author.name
With replied to:
message + " by " + author.name + " (replied to " + repliedTo.author.name + ")"
Beyond these basics, you are free to add to the API, but only these concepts will be scored automatically.

What I have tried:

reading python documentations but i still cant understand what the challenge requires. maybe because i am a beginner

2 Ответов

Рейтинг:
2

Member 14069537

импорт даты и времени

пользователь класса:

def __init__(self, name, lastloggedIn = None):
self.name = имя
самостоятельно.сеанса в поле = ложь
self.lastloggedIn = lastloggedIn

def name(self):
вернуться самостоятельно.название

def name(self, value):
self.name = значение

деф is_logged_in(самовыдвижение):
вернуться самостоятельно.сеанса в поле

деф last_logged_in_at(самовыдвижение):
вернуться самостоятельно.lastloggedIn

деф log_in(самовыдвижение):
самостоятельно.сеанса в поле = истина
самостоятельно.lastloggedIn = датавремя.датавремя.utcnow().функцию strftime("%г-%м-%д %ч:%м:%ы")


деф log_out(самовыдвижение):
самостоятельно.сеанса в поле = ложь

can_edit дефа(Селф комментарий):
если комментировать.автор.имя == собственн.название:
вернуть true
еще:
возвращать false

деф can_delete(самовыдвижение, комментарий):
возвращать false

# деф to_string(самовыдвижение):
# пас

модератор класса(пользователь):
def __init__(self, name):
пользователей.__инит__(самостоятельная, имя)

деф can_delete(самовыдвижение, комментарий):
вернуть true



администратор класса(модератор):

def __init__(self, name):
ведущий.__инит__(самостоятельная, имя)

can_edit дефа(Селф комментарий):
вернуть true


комментарий класса:
деф __инит__(самостоятельная, Автор, Сообщение, replied_to = нет, createdAt = нет):
самостоятельно.createdAt = датавремя.датавремя.сейчас().функцию strftime("%г-%м-%д %ч:%м:%ы")
self.author = автор
self.message = сообщение
самостоятельно.replied_to = replied_to

автор дефа(Селф):
вернуться самостоятельно._автор

def author(self, value):
самостоятельно.автор = значение

деф сообщение(самовыдвижение):
вернуться самостоятельно.сообщение

def message(self, value):
self.message = значение

деф created_at(самовыдвижение):
вернуться самостоятельно.createdAt

деф replied_to(самовыдвижение):
вернуться самостоятельно.replied_to

деф replied_to(самостоятельно, значение):
self.replied_to = значение

деф to_string(самовыдвижение):
если self.replied_to == нет:
вернуться самостоятельно.replied_to + " по " + самовывоз.автор.название




импорт unittest

user1 = пользователь('пользователь 1')
mod = модератор('модератор')

тест класса(unittest.Пример):
деф test_instantiation(самовыдвижение):
self.assertEqual(user1.name,'пользователь 1', 'Имя пользователя установлено правильно')
user1.name = 'пользователь 1 обновлен'
self.assertEqual(user1.name,"пользователь 1 обновлен", "имя пользователя может быть обновлено")
self.assertIsInstance(mod, user, 'модератор-это пользователь')


Рейтинг:
0

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.
Поэтому просто скопируйте и вставьте вопрос и скажите: "Я все еще не могу понять, чего требует вызов. может быть, потому, что я новичок" не дает вам решения. Внимательно прочтите его, просмотрите свои заметки о последней лекции(лекциях), и если вы все еще не понимаете, поговорите со своим учителем.
Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Member 14036261

прежде чем прийти сюда, я прочитал несколько документов по python, и ни одна из них не объясняла мне, как Новичок. вместо того, чтобы думать обо мне как о ленивом, может быть, вы могли бы тогда просто сослаться на учебник, который вы, возможно, знаете, что это гораздо легче понять.
К вашему сведению, лекций нет, я использую онлайн-материалы для изучения python. это была одна из задач, которую я пытаюсь решить. МНЕ ПРОСТО НУЖНО ОБЪЯСНЕНИЕ ТОГО, ЧТО ТРЕБУЕТ ЭТОТ ВОПРОС!

OriginalGriff

Важный жизненный урок: никогда не кричите на людей, от которых хотите получить добровольную помощь.

Member 14036261

ладно Добрый день

Member 14375027

OriginalGriff - то, как вы обращались с первоначальным владельцем потока, является неуважительным и показывает, насколько вам не хватает навыков, необходимых для мотивации других людей к достижению того, что они ищут. На вашем месте я бы дал правильный совет, не показывая своего профессионализма и разочарования. Если вы ищете, чтобы быть суровым, то это не то место, чтобы быть. Если вы считаете меня новичком, подумайте еще раз. Я учусь в лучшем университете, и ни у кого нет таких характеристик, как у вас. Нет необходимости в карри. Удачи.

OriginalGriff

Мне жаль, что вы так думаете, но, наверное, Вы тоже студент, и вам хотелось бы получить полное решение этой домашней задачи. И я также предполагаю, что у вас есть тот же наставник, что и у ОП ...

На самом деле мы здесь не для того, чтобы делать домашнюю работу для людей: это никому не помогает в долгосрочной перспективе и фактически вредит прогрессу учащихся. Вы учитесь на практике, а не на случайном взгляде на решение, прежде чем передать его. И это имеет три "плохих" эффекта:
0) справедливо ли это по отношению к вашим одноклассникам, которые прилагают усилия, чтобы получить худшую оценку, чем копия и паста от кого-то, кто знает, что они делают?
1) Вы будете удивлены, сколько репетиторов знают о подобных сайтах и заметят такие домашние задания copy'n'paste. Некоторые вышвырнут тебя из класса за это ...
2) если вы не делаете, вы не учитесь. Если вы не учитесь, то вы проваливаете экзамены, потому что у вас нет доступа к необходимой вам помощи.

И copy'N ' paste вашего домашнего вопроса без абсолютно никакой попытки решить его-это мертвая выдача.

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем делать ВСЮ работу, это часть ваших оценок, и было бы несправедливо, если бы мы делали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

И если вы хотите, чтобы я был резок, я могу - первоначальная почта, которую я сделал, была мягким упреком, а не тяжелой печатью!