zoukankan      html  css  js  c++  java
  • Python3 面向对象程序设计(类)

    一、自定义类

    1、属性与方法

    格式:

    class classname:
        def __init__(self,a,b):
          self.a=a
          self.b=b
        def ...

    >一般都有一个__init__函数来定义属于这个类的参数,前后都被"__"包围的函数为特殊方法

    ;以"__"开头的变量只能读,不能写,相当于private数据。

    >如果重新实现str,repr等方法,值应使用表象形式:

    def __str__(self):
           return "({0.a!r},{0.b!r})".format(self)

    >如果调用一个类的方法,python就会自动在类树中进行回溯,如果一直找不到就会产生一个AttributeError.

    >在方法前加super()表示调用基类的方法,总是调用super().__init__()是一个种合理的做法。

    >自定义类的所有实例都支持==,这种比较总是返回False,通过对特殊方法__eq__()进行重新实现,__ne__()也会跟着自动实现。

    >如果我们希望避免不适当的比较,可以使用断言(如:assert isinstance(other,Point));也可以用产生TypeError异常来声明不支持这两个对象的比较操作(如:if not isinstance(other,Point):raise TypeError());方法三:if not isinstance(other,Point):return NotImplem-emted,但只有在类只对比较特殊方法进行了重新实现才可能返回NotImplemented。

    >isinstance()为内置的函数,以一个对象与一个类(或类构成的元组)为参数,如果对象属于给定的类,或基类,就返回True。

    >object提供的比较的特殊方法:__lt__(),__le__(),__eq__(),__ne__(),__ge__(),__gt__()。

    2、继承与多态

    class classname2(classname):
      def __init__(self)
      ...

    classname2是classname的继承类。

    多态:给定类的任意对象在使用时都可以看作该类的任意某个基类的对象。

    3、使用特性进行属性的存取控制

    修饰器(decorator):是一个函数,该函数以一个函数或方法为参数,并返回参数“修饰后”版本。使用修饰器以@符号引导来进行标记。

    例(用内置的property()函数对a的属性进行修饰,使a必须为大于0的数):

    @property
    def a(self):
        return self.__a
    @a.setter
    def a(self,a):
        assert a>0,"a must be nonzero and non-negative"
        self.__a=a

    每个创建的特性都包含getter,setter,deleter等属性。

    4、创建完全整合的数据类型

    对于不想要的来自于基类的方法,可以用raise Error的来取消这些方法的使用。对于要同时取消多个类的情况,可以借助内置的exec()函数来实现,它会动态地执行从给定对象传递来的代码。

    二、自定义组合类

    组合类型的特殊方法:

    __contains__(self,x)     x in y
    __delitem__(self,k)      del y[k]
    __getitem__(self,k)      y[k]
    __iter__(self)          for x in y :pass 返回序列中y中的项或映射y中键的迭代子
    __len__(self)          len(y)
    __reversed__(self)      reversed(y)
    __setitem__(self,k,v)    y[k]=v

    对于赋值=后边的值也可以用or,如果第一个值为False,则使用or后边的值(a= b or 3)。

  • 相关阅读:
    nginx内置变量
    MySQL获取错误编号 try判断 获取 Exception 上的错误
    MySQL错误代码大全(转)
    PHP递归菜单/权限目录(无限极数组)
    PHP魔术方法
    php and和&&的一个坑(文章是发现其他博客,保存自己笔记)
    nginx配置php与前后端分离(文档只供本人观看,接受错误但勿喷!)
    servlet的构造器与init方法
    模板方法设计模式
    MVC
  • 原文地址:https://www.cnblogs.com/aland-1415/p/7011419.html
Copyright © 2011-2022 走看看