zoukankan      html  css  js  c++  java
  • python 面向对象

    构造函数

    析构函数

    类的继承  多继承

     1 class People(object):                   #People :表示类名,一般类名手写字母大写 ,object 为python3新式类标识,  新式类与旧式类的区别则是一个广度优先,一个深度优先,具体见后续
     2     def __init__(self,name,age):        #__init__这里是构造函数   self代表的是实例化的对象,后面在实例化时就通过self将对象传进来  ,name age  这里表示类的静态属性,实质就是变量
     3         self.name = name                #将定义的变量与实例化的对象联系起来
     4         self.age = age
     5         
     6     def talking(self):                 #类的方法 ,也叫类的动态属性
     7         print('{} talking ......'.format(self.name))
     8         
     9     def __del__(self):                 #析构函数,用于在实例实例化完毕,即实例释放或者销毁的时候执行一些操作,例如关闭一些数据库连接  在后面的程序中如果不手动del掉实例m1 ,这个析构函数将在程序运行结束后才会执行
    10         print("the end")
    11         
    12 
    13 class Shejiao(object):
    14     
    15     def makefriends(self,someone):
    16         print('{} is make firends with {}'.format(self.name,someone.name))   #此处的someone.name是应为是实例在继承People类之后,因此也就有了可以直接调用的name属性
    17         
    18 
    19       
    20 class Man(People,Shejiao):                     #定义一个新的类,继承People类
    21 #    pass                               #如果定一个新的类的子类,如果没有添加任何另外的属性,怎必须要添加一个pass 否则会报错
    22     def Dog(self):
    23         print("汪汪汪")
    24 
    25  
    26 class Woman(People,Shejiao):                   #Woman类继承People类 与Shejiao类,继承顺序从左到右  
    27     def __init__(self,name,age,born):         #重构类(新增born静态属性)
    28 #        People.__init__(self,name,age)       #继承父类的法一
    29         super(Woman,self).__init__(name,age)  #super 函数调用父类法二 ,一般都使用此方法  ,新式类写法
    30         
    31         self.born = born
    32     
    33     def sweater(self):
    34         print('{} sweater one boy.'.format(self.name))
    35         
    36         
    37 #m1 = People("long1","22")              #实例化
    38 #m1.talking()                           #调用实例化后对象m1的talking 方法
    39 #del m1                                 #这里如果不手动del掉实例m1进行销毁 ,m1这个对象将一直存在到程序运行结束,其包含的析构函数也将在程序运行结束后才会被执行
    40 
    41 man1 = Man("long2","23")
    42 #man1.talking()
    43 
    44 wo1 = Woman("hua","18","yes")
    45 #wo1.sweater()
    46 
    47 wo1.makefriends(man1)

    面向对象编程(oop)

    面向对象:
    面向对象三大特性: 封装 继承 多肽
    封装: 封装就是将具体的客观事物封装成抽象的类。并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可行的进行信息隐藏
    继承: 面向对象编程语言的一个主要功能就是继承 继承是指这样的一种能力:他可以使用现有的类的所有的功能,并在无需重新编写原来的类的情况下对这些功能进行扩展,
    通过继承创建的新类称为“子类”或者“派生类”。
    被继承的类称为“基类”、“父类”或者“超类”
    继承的过程就是从一般到特殊的过程
    要实现继承,可以通过“继承”(Inheritance)和“组合”(composition)来实现
    在某些oop语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
    继承概念的实现方式主要有2类:实现继承,接口继承
    1.实现继承是指使用基类的属性和方法而无需额外编码的能力;
    2.接口继承是指仅使用属性和方法的名称,但是子类必须提供实现的能力(子类重构爹类方法)


    在考虑使用继承时候,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,employee是一个人,manager也是一个人,因此这两个类都可以继承person类。但是Leg类却不能继承person类,应为腿并不是一个人。
    抽象类仅定义将由子类创建的一般属性和方法


    面向对象编程范式大致为:划分对象--> 抽象类 --> 将类组织成为层次化结构(继承和合成) --> 用类与实例进行设计和实现几个阶段

    #经典类与新式类的区别
    class A: #经典类格式
    ...

    class A(object): #新式类格式
    ...

    python2中经典类是按照深度优先来继承的
    新式类是按照广度优先来继承的
    python3中经典类和新式类都是统一按照广度优先来继承的

    新式类与经典类区别如下图:

    类关系:有ABCD4个类,D继承B,C  B,C分别继承A

    广度优先与深度优先并没有完全的谁对谁错,不同情况有各自的优点

  • 相关阅读:
    微信:JSSDK开发
    JSSDK图像接口多张图片上传下载并将图片流写入本地
    微信JSSDK上传多张图片
    laravel自定义公共函数的引入
    php把数据转换为json格式
    laravel控制器方法中,用函数作为变量进行传递时的处理方法
    ckeditor富文本编辑器的基本配置设置:
    laravel处理菜单保持的方法:
    laravel基于Bootstrap的成功和失败的提示信息和验证提示信息
    laravel Eloquent 查询数据库判断获取的内容是否为空
  • 原文地址:https://www.cnblogs.com/heaven-xi/p/9454703.html
Copyright © 2011-2022 走看看