2014-02-08 3 views
-1

Привет, ребята, я новичок в разработке python. Я изучил классы и функции в python и создал аргументы функций и все. Я видел такой код:Объект с классом в python

class person(object): 
    def init(self,name): 
     self.name=name 
    def info(self) 
     print "My name is {0}, I am a {1}".format(self.name,self.__class__.__name__) 
bob = person(name='Robert') 
bob.info() 

Это производит выход «Меня зовут Роберт, я человек»

мне просто нужно знать, использование объекта в классе человека (объекта). Можем ли мы использовать любые имена вместо объектов? Почему мы назначаем такой объект с именем класса? Как он используется? Я много раз искал и не нашел полезного ответа.

Любая помощь будет оценена ..Thanks

ответ

2

Параметры в скобках при инициализации класса по буквам, что классы определенного класса наследует. Вы в основном говорите: человек наследует объект, или человек - это тип объекта.

Python class inherits object

Есть небольшие различия между наследуя object и нет.

Что касается того, что вещь в кронштейне делает, это когда вы хотите сделать более сложные объекты, которые являются подклассами других объектов

Например:

class LivingThing(object): 
    def __init__(self, lifespan): 
     self.lifespan = lifespan 

    def lifespan_info(self): 
     print("this object's lifespan is {}".format(lifespan)) 

class Person(LivingThing): 
    # inherits from LivingThing 
    def __init__(self, gender): 
     LivingThing.__init__(self, 80) 
     self.gender = gender 

    def gender_info(self): 
     print("this object's gender is {}".format(gender)) 


person1 = Person("male") 
person1.lifespan_info() 
person1.gender_info() 

Идея object-oriented design является что вы можете создавать объекты, которые происходят из других объектов (в этом случае «Лицо» - это тип «LivingThing»), и если все сделано правильно, это может сделать ваш код намного проще в обслуживании, расширении и чтении.

Поскольку Person является подклассом LivingThing, Person также может использовать методы, определенные в LivingThing, а также при необходимости может переопределять свои методы.

Наследование от объекта на самом деле не имеет большого значения - многие считают его необязательным. Он был введен в Python2.3 и создает «объект нового стиля» - проверьте здесь список различий. What is the difference between old style and new style classes in Python?

2

Классы нового стиля должны наследоваться от класса объекта.

Более подробную информацию можно найти здесь: http://www.python.org/doc/newstyle/

+0

Спасибо ..i будет отсылать его ..;) – william

0

Мне просто нужно знать, использование объекта в классе человека (объекта) .Can мы использовать любые имена вместо объектов there.Why мы присваивающих такой объект с именем класса. Использует его. Я искал manyt imes и не нашел никакого полезного ответа.

object в этом случае является родительским классом класса person. Вы можете наследовать класс из других классов. Это называется наследованием и является одной из основных концепций объектно-ориентированного программирования (ООП). OOP - это не просто вещь Python, вы можете прочитать о ее концепциях и на других языках.

В этом конкретном случае вы наследуете свой класс из встроенного класса Python object для поддержки некоторых новых функций introduced at some point в Python.

0

В то время как ответ от Колин Бернет точно соответствует метке, я хотел бы подробно рассказать об этом с примером и некоторым пояснением.

Для быстрого понимания различий между классами старого и нового стилей, см. 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() 
Смежные вопросы