zoukankan      html  css  js  c++  java
  • 了解类和正则表达式。

     

    面向对象的三大特性

     

    继承

     

    什么是继承

     

    继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类

     

    python中类的继承分为:单继承和多继承

    多态

    多态

    多态指的是一类事物有多种形态

    动物有多种形态:人,狗,猪

    复制代码
    复制代码
    import abc
    class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
        @abc.abstractmethod
        def talk(self):
            pass
    
    class People(Animal): #动物的形态之一:人
        def talk(self):
            print('say hello')
    
    class Dog(Animal): #动物的形态之二:狗
        def talk(self):
            print('say wangwang')
    
    class Pig(Animal): #动物的形态之三:猪
        def talk(self):
            print('say aoao')
    复制代码
    复制代码

    文件有多种形态:文本文件,可执行文件

    复制代码
    复制代码
    import abc
    class File(metaclass=abc.ABCMeta): #同一类事物:文件
        @abc.abstractmethod
        def click(self):
            pass
    
    class Text(File): #文件的形态之一:文本文件
        def click(self):
            print('open file')
    
    class ExeFile(File): #文件的形态之二:可执行文件
        def click(self):
            print('execute file')
    复制代码
    复制代码

    多态性

    一 什么是多态动态绑定(在继承的背景下使用时,有时也称为多态性)

    多态性是指在不考虑实例类型的情况下使用实例

    复制代码
    复制代码
    在面向对象方法中一般是这样表述多态性:
    向不同的对象发送同一条消息(!!!obj.func():是调用了obj的方法func,又称为向obj发送了一条消息func),不同的对象在接收时会产生不同的行为(即方法)。
    也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
    
    比如:老师.下课铃响了(),学生.下课铃响了(),老师执行的是下班操作,学生执行的是放学操作,虽然二者消息一样,但是执行的效果不同
    复制代码
    复制代码

    封装

    【封装】

             隐藏对象的属性和实现细节,仅对外提供公共访问方式。

    【好处】 

    1. 将变化隔离; 

    2. 便于使用;

    3. 提高复用性; 

    4. 提高安全性;

    【封装原则】

          1. 将不需要对外提供的内容都隐藏起来;

          2. 把属性都隐藏,提供公共方法对其访问。

    python以下划线开头的变量名含义

    Python核心风格:避免用下划线作为变量名的开始。

    因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是私有的,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对Python 来说有特殊含义,对于普通的变量应当避免这种命名风格。

     "单下划线"

     "单下划线开始的成员变量叫做保护变量,意思是只有类对象和自类对象自己能访问到这些变量。

    例子:以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入。

     "双下划线"

    "双下划线开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。

     例子:以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如 __init__()代表类的构造函数。

    使用Python编写一个三维向量,实现向量的加法减法,点乘叉乘:

    #  --coding: gb2312--

    class vector3:

     def __init__(self, x_ = 0, y_ = 0, z_ = 0): #构造函数

      self.x = x_

      self.y = y_

      self.z = z_

     def __add__(self, obj): #重载+作为加号

      return vector3(self.x+obj.x, self.y+obj.y, self.z+obj.z)

     def __sub__(self, obj): #重载-作为减号

      return vector3(self.x-obj.x, self.y-obj.y, self.z-obj.z)

     def __mul__(self, obj): #重载*作为点乘

      return vector3(self.x*obj.x, self.y*obj.y, self.z*obj.z)

     def __pow__(self, obj): #重载**作为叉乘。不好,偏离了常理上的意义,可以考虑重载其他符号,或者直接写函数。

      return vector3(self.y*obj.z-obj.y*self.z, self.z*obj.x-self.x*obj.z, self.x*obj.y-obj.x*self.y)

     def __str__(self): #供print打印的字符串

      return str(self.x)+','+str(self.y)+','+str(self.z)

    v1 = vector3(1, 2, 3)

    v2 = vector3(0, 1, 2)

    print v1 + v2

    print v1 - v2

    print v1 * v2

    print v1 ** v2

    结果:

  • 相关阅读:
    hdu 1426 Sudoku Killer
    hdu 1426 Sudoku Killer
    hdu 1372 Knight Moves
    hdu 1372 Knight Moves
    在 MySQL 中查找含有目标字段的表
    又一次编译无效数据库组件
    POJ 3468 A Simple Problem with Integers(线段树功能:区间加减区间求和)
    CodeForces 42C Safe cracking 规律题
    博客搬家啦!!!!!!!!!!!!!!!!!!!!!!!!
    DML语句报错是因为控制文件无法扩大还是另有原因?
  • 原文地址:https://www.cnblogs.com/gsd-tt/p/10724826.html
Copyright © 2011-2022 走看看