Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 15, 2017 22:54:48

asdfr
Зарегистрирован: 2017-01-03
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

вопрос по экземпляром класса

есть вот такая задача
Напиши класс Person с полями-данными:
age - числовой возраст
name - строковое имя
telephone - телефонный номер
Добавь конструктор и метод dump, который выводит всю инфу о данной персоне в удобном виде.
Создай три экземпляра класса Person и заполни данные и вызови для всех dump().
я написал вот такой код

 class Person:
    def __init__(self):
        self.name='Alex '
        self.age=24
        self.telephone=89254510011
    def addWeight(self, name1):
        self.name = name1
    def addWeight1(self, age1):
        self.age = age1
    def addWeight2(self, telephone1):
        self.telephone = telephone1
    def poisk(self,name2):
        self.name==name2
        print("name ->", self.name,)  
        print("age ->", self.age,)
        print("telephone ->", self.telephone)
    def dump(self):
        print("name ->", self.name,)  
        print("age ->", self.age,)
        print("telephone ->", self.telephone)
        
p=Person()
p.addWeight('serg')
p.addWeight1(24)
p.addWeight2(89537647585)
p.poisk('serg')
p.dump()
class Person:
    def __init__(self):
        self.name='Ron '
        self.age=27
        self.telephone=8925140011
    def dump(self):
        print("name ->", self.name,)  
        print("age ->", self.age,)
        print("telephone ->", self.telephone)
p=Person()
p.dump()
        
class Person:
    def __init__(self):
        self.name='Nick '
        self.age=43
        self.telephone=89251110421
    def dump(self):
        
        print("name >", self.name,)  
        print("age ->", self.age,)
        print("telephone ->", self.telephone)
p=Person()
p.dump()
Вопрос в следующем. как создать экземпляр класса для любова класса Person.Если что извинити. С классами только начал разбираться.и пока далеко не все понятно)

Офлайн

#2 Янв. 16, 2017 05:08:25

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

вопрос по экземпляром класса

Добрый день!

Ваш конструктор класса можно существенно улучшить. Нужно, чтобы он принимал значения с сразу назначал их как атрибуты создаваемому экземляру, например так:

 class Person:
    ''' Awesome class Person.
   
    Some details about the class...
     '''
    def __init__(self, name='John Doe', age=10, phone='+14561237456'):
        self.name = name
        self.age = age
        self.telephone = phone

Тогда представитель класса Person может быть создан так:

 p = Person(name='Alexander', age=28, phone='+791612345')
В этом случае, p.age будет 28, p.name будет Alexander и p.phone будет ‘+791612345’ . Если в этом случае вы создадите представителя без аргументов, newp = Person(), то newp получит аттрибуты по умолчанию: name = John Doe etc.

Названия методов лучше использовать другие, тем более addWeight - это совсем запутывает, поскольку здесь о весе речь не идет, а еще лучше следовать pep8, когда даете названия методам.

Лучше использовать названия: set_name, set_age, set_phone_number (или просто set_phone);

Метод poisk – лучше search или lookfor, но этот метод предполагает, что надо что-то искать; если предполагается искать представителей класса Person, то этому методу здесь не место. Допустим у нас есть класс PersonArray, массив представителей класса Person. Тогда, вполне разумно, что PersonArray должен иметь такой метод поиска:

  class PersonArray(list):
    def lookfor(self, name='John Doe', age=10, phone='+123456'):
        return PersonArray([person for person in self if (person.name == name) or (person.age == age) or (person.phone == phone)])

dump – странно (точнее неправильно), что такое имя используется для вывода инфы об объекте; dump – хорошо, если куда-то нужно было бы поместить объект, представить в какой-либо специальной форме (сериализовать);

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version