zoukankan      html  css  js  c++  java
  • python初步学习-面向对象之 类(二)

    方法重写

    如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:

    #!/usr/bin/env python
    #coding:utf8
    
    class Parent:
        def myMethod(self):
            print '调用父类方法'
            
    class Child(Parent):
        def myMethod(self):
            print '调用子类方法'
            
    c = Child()
    c.myMethod()
    
    

    执行以上代码输出结果如下:

    调用子类方法
    

    下表列出了一些通用的功能,你可以在自己的类中重写:

    序号 方法,描述&简单的调用
    1 __init__(self[,args...]):构造函数,简单的调用方法:obj = className(args)
    2 __del__(self):删除一个对象,简单的调用方法:del obj
    3 __repr__(self):转化为供解释器读取的形式,简单的调用方法:repr(obj)
    4 __str__(self):用于将值转化为适用于人阅读的形式
    5 __cmp__(self,x):对象比较,简单的调用方法:cmp(obj,x)

    运算符重写

    python同样支持运算符重写,示例如下

    #!/usr/bin/python
     
    class Vector:
       def __init__(self, a, b):
          self.a = a
          self.b = b
     
       def __str__(self):
          return 'Vector (%d, %d)' % (self.a, self.b)
       
       def __add__(self,other):
          return Vector(self.a + other.a, self.b + other.b)
     
    v1 = Vector(2,10)
    v2 = Vector(5,-2)
    print v1 + v2
    

    以上代码执行结果如下所示:

    Vector(7,8)
    

    类属性与方法

    类的私有属性

    __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或者直接访问,在类内部使用self.__private_attrs

    类的方法

    在类的内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数

    类的私有方法

    __private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用self.__private_methods

    实例:

    #!/usr/bin/env python
    #coding:utf8
    
    class JustCounter:
        __secretCount = 0   #私有变量
        publicCount = 0     #公共变量
        
        def count(self):
            self.__secretCount += 1
            self.publicCount += 1
            print self.__secretCount
            
    
    counter = JustCounter()
    counter.count()
    counter.count()
    print counter.publicCount
    print counter.__secretCount     #报错,实例不能访问私有变量
    
    

    python不允许实例化的类访问私有数据,但你可以使用object.__className__attrName访问属性,将如下代码替换以上代码的最后一行代码

    print counter._JustCounter__secretCount
    

    执行以上代码,执行结果如下:

    1
    2
    3
    4
    

    单下划线、双下划线、头尾双下划线说明:

    • __foo__:定义的是特殊方法,一般是系统定义名字,类似__init__()
    • _foo:以单下划线开头的表示是protected类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于from module import *这种导入方式
    • __foo:双下划线的表示的是私有类型(private)的变量,只能是允许这个类本身进行访问了。
  • 相关阅读:
    Java操作excel,读取及导出
    vue 在package.json配置对外暴露访问地址(手机端访问本地项目地址)
    element UI upload组件上传附件格式限制
    linux之vim/vi快速复制多行内容的快捷键
    使用vant的Toast组件时提示not defined
    如何使用js判断当前页面是pc还是移动端打开的
    JavaScript 保留两位小数函数
    Linux其他命令
    linux学习ls的三个选项 lha的作用和隐藏文件的知识
    vue+ element-ui el-table组件自定义合计(summary-method)坑
  • 原文地址:https://www.cnblogs.com/pingqiang/p/7801167.html
Copyright © 2011-2022 走看看