• 模块,类和对象


    很显然,在学习类与对象之前,我们得知道一些面向对象术语。

    '''

    (class):告诉Python创建新类型的东西。

    对象(object):两个意思,即最基本的东西,或者某个东西的实例,不唯一,可以self等

    实例(instance):这是让Python创建一个类时得到的东西。

    def:这是在类里边定义函数的方法。

    self:在类的函数中,self指代被访问的对象或者实例的一个变量,不唯一。

    继承(inheritance):指一个类可以继承另一个类的特性,和父子关系类似。

    组合(composition):指一个类可以将别的类作为它的部件构建起来,有点儿像车子和车轮的关系。

    属性(attribute):类的一个属性,它来自于组合,而且通常是一个变量。

    是什么(is-a):用来描述继承关系,如金鱼is a 鱼

    有什么(has-a):用来描述某个东西是由另外一些东西组成的,或者某个东西有某个特性。如金鱼 has a 嘴

    '''

    接下来我会给一些语汇练习,可以加深你们对类与对象的一些理解:

    '''

    class X(Y):创建一个叫X的类,它是Y的一种。

    class X(object):

        def __init__(self,J): 类X有一个__init__接收self和J作为参数。

    class X(object):

        def M(self,J): 类X有一个函数名称为M,它接收self和J作为参数。

    foo=X(): 将foo设为类X的一个实例。

    foo.M(J): 从foo中找到M函数,并使用self和J参数调用它。

    foo.K=Q: 从foo中获取K属性,并将其设为Q。

    '''

    仔细阅读这段话,它会帮助你加深理解类与对象。

    我们可以把一些变量改成问号,得出一个公式:

    '''

    1.创建一个叫???的类,它是Y的一种。

    2.类???有一个__init__,能接收self和???作为参数。

    3.类???有一个函数名称为???,可以接收self和???作为参数。

    4.将foo设为class???的一个实例。

    5.从foo中找到???函数,并使用self和???参数调用它。

    6.从foo中获取???属性,并将其设为???。

    '''

    现在你能理解了吗?建议动手写一个类与对象的代码函数吧!

    以下是我动手尝试写的代码:

    class Parents(object):     #定义一个家长类

        def __init__(self,name,age,child_name,child_age):          #这个家长类的属性是姓名,年龄,孩子姓名和孩子年龄。

            self.name=name

            self.age=age

            self.child_name=child_name

            self.child_age=child_age

        def information(self):        #打印一个实例化对象的信息的函数

            print('''

            your name is %s.

            your age is %d.

            your child name is %s.

            your child age is %d.

            '''%(self.name,self.age,self.child_name,self.child_age))

    Huang=Parents('huangfather',20,'huangpaopao',5)     #创建第一个对象实例化,存储到变量Huang。

    Yan=Parents('yanmother',20,'yanpaopao',5)               #创建第二个对象实例化,存储到变量Yan。

    Huang.information()

    Yan.information()

    输出结果:

            your name is huangfather.

            your age is 20.

            your child name is huangpaopao.

            your child age is 5.

     

     

            your name is yanmother.

            your age is 20.

            your child name is yanpaopao.

            your child age is 5.

    接下来,我们来深入以下类与对象之间的从属关系。

    在编写项目中,我们实际上是要创建许许多多个类的。

    在这些类中,有些是存在联系的。

    比如is-a关系,金鱼 is-a 鱼。

    比如has-a关系,人 has-a 宠物。

    这两者的关系很好理解吧?

    如果把对象引进来的话呢?我们把金鱼取名为小丽。

    小丽 is-a 鱼,这句话没毛病吧?

    但这个时候已经不是类与类之间的关系了,而是对象与类的关系。

    此时小丽是类的一个实例化出来的对象,也就是说,小丽是金鱼的一个实例。

    我们把宠物取名为二哈,人 has-a 二哈,这也是类与对象之间的联系。

    如果把人命名为大明, 

    大明 has-a 二哈,这个就是对象与对象之间的联系,因为两者都是实例。

    所以我们整理一下:金鱼、鱼、人和宠物都是类,小丽、二哈和大明都是对象。

    上段文字你一下子看完你可能会感觉太绕了,我不如放一段代码,注意看我的注释行动:

    #Animal is-a object

    class Animal(object):

        pass

    #DOG is-a Animal

    class Dog(Animal):

        def __init__(self,name):

            self.name=name

    #Cat is-a Animal

    class Cat(Animal):

        def __init__(self,name):

            self.name=name

    #Person is-a object

    class Person(object):

        def __init__(self,name):

            self.name=name

            #Person has-a pet of some kind

            self.pet=None

    #Employee is-a Person

    class Employee(Person):

        def __init__(self,name,salary):

            super(Employee,self).__init__(name)

            #Employee has-a salary

            self.salary=salary

    #Fish is-a object

    class Fish(object):

        pass

    #Salmon is-a Fish

    class Salmon(Fish):

        pass

    #Halibut is-a Fish

    class Halibut(Fish):

        pass

    #rover is-a Dog

    rover = Dog("Rover")

    #satan is-a Cat

    satan = Cat("Satan")

    #Mary is-a Person

    mary = Person("Mary")

    #Mary has-a Cat pet

    mary.pet=satan

    #Frank has-a 120000 salary

    frank=Employee("Frank",120000)

    #frank has-a DOG pet

    frank.pet=rover

    #filpper is-a Fish

    flipper = Fish()

    #crouse is-a Salmon

    crouse = Salmon()

    #harry is-a Halibut

    harry =Halibut()

    好好看这段代码以及我的注释,希望能对你理解类与类的联系,类与对象的联系和对象与对象的联系有所帮助。

  • 相关阅读:
    PHP里json_encode()与json_decod()区别
    数组进行排序
    tp5利用自带上传类实现单个文件与多文件上传
    mkdir() Permission denied 报错问题
    如何快速熟悉新项目的代码?
    Tp5自定义路径写入日志
    spring解决循环依赖
    spring注解的使用
    ssm的整合
    编程知识总结
  • 原文地址:https://www.cnblogs.com/Masterpaopao/p/10105915.html
Copyright © 2020-2023  润新知