В то время как ответ от Колин Бернет точно соответствует метке, я хотел бы подробно рассказать об этом с примером и некоторым пояснением.
Для быстрого понимания различий между классами старого и нового стилей, см. this SO question.
Это говорит о том, что одним из ключевых способов принятия новых классов является то, что Python стремится к унификации встроенных типов и пользовательских типов. Понимание этого аспекта важно, поскольку это дает вам возможность расширить функциональность, открытую встроенными классами, с помощью собственного наследования типа.
В вашем примере класс person
наследуется от встроенного класса object
. Родительский класс должен быть тем, что имеет смысл для вашего бизнес-домена.
Для примера. рассмотрите случай, когда вы захотите реализовать простую базу данных в памяти объектов Person, и вы хотите вернуть объект Person, учитывая его/ее фамилию. Затем вы можете реализовать его элегантно, как показано ниже. Обратите внимание на то, как предоставление новых классов стилей позволяет вам отображать и расширять встроенные классы в ваш реальный проблемный домен,
import os
class Person(object):
def __init__(self, firstname=None, lastname=None, age = 0):
self.__firstname = firstname
self.__lastname = lastname
self.__age = age
def get_firstname(self):
return self.__firstname
def get_lastname(self):
return self.__lastname
def get_age(self):
return self.__age
''' Create a PersonDatabase class that inherits the built-in dict type. This is an example of mapping a built-in class to the problem domain of maintaining a repository of Persons for an application'''
class PersonDatabase(dict):
def __init__(self):
pass
def add_person(self,person_object):
self[person_object.get_lastname()] = person_object
def get_person_by_lastname(self, lastname):
return self[lastname] if lastname in self else None
def main():
p1 = Person('John', 'Doe', 21)
p2 = Person('Alice', 'Jane', 25)
person_db = PersonDatabase()
person_db.add_person(p1)
person_db.add_person(p2)
#get the record from the datbase given the last name
p1 = person_db.get_person_by_lastname('Jane')
if p1 is not None:
print ' Name : ' + p1.get_firstname() + ' Last Name : ' + p1.get_lastname() + ' Age : ' + str(p1.get_age())
if __name__ == '__main__':
main()
Спасибо ..i будет отсылать его ..;) – william