python中的类对象

时间:2014-02-08 08:33:40

标签: 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()

这会产生输出“我的名字是罗伯特,我是一个人”

我只需要知道在类人(对象)中使用对象。我们可以使用任何名称而不是对象吗?为什么我们用类名分配这样的对象?怎么用?我已多次搜索,但没有找到任何有用的答案。

任何帮助将不胜感激..谢谢

4 个答案:

答案 0 :(得分: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背后的想法是你可以创建从其他对象派生的对象(在这种情况下,“Person”是一种“LivingThing”),如果正确完成,它可以使你的代码更容易维护,扩展和阅读。

由于Person是LivingThing的子类,Person也可以使用LivingThing中定义的方法,并且如果需要也可以覆盖它的方法。

继承对象实际上并不是什么大问题 - 很多人都认为它是可选的。它是在Python2.3中引入并创建一个“新风格的对象” - 在这里查看差异列表。 What is the difference between old style and new style classes in Python?

答案 1 :(得分:2)

新式类必须从对象类继承。

可在此处找到更多信息: http://www.python.org/doc/newstyle/

答案 2 :(得分:0)

  

我只需要知道在类人(对象)中使用对象。可以   在那里使用任何名称而不是对象。为什么我们分配这样的   具有类名的对象。它的用途是什么。我已经搜索了许多名字   并没有找到任何有用的答案。

在这种情况下,

object是类person的父类。您可以从其他类继承一个类。这称为继承,是面向对象编程(OOP)的核心概念之一。 OOP不仅仅是一个Python的东西,你也可以在其他语言中阅读它的概念。

在这种特殊情况下,您从名为object的内置Python类继承您的类,以支持Python中的一些新功能introduced at some point

答案 3 :(得分:0)

虽然来自 Colin Bernet 的回复准确地达到了标记,但我想用一个例子和一些背景说明来详细说明。

要快速了解旧式和新式课程之间的区别,请参阅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()