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)。

  • 相关阅读:
    django 关于render的返回数据
    关于 eval 的报错 Uncaught ReferenceError: False is not defined
    Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>) SyntaxError: Unexpected token R in JSON at position 0 at JSON.parse (<anonymous>)
    ajax 异步请求返回只刷新一次页面
    线程
    IO
    IO初步,字节输入流和字节输出流
    File、FileFilter、递归初步
    Map、可变参数、静态导入、Collections、Arrays、集合嵌套
    Collection单列集合中的常用实现类
  • 原文地址:https://www.cnblogs.com/aland-1415/p/7011419.html
Copyright © 2011-2022 走看看