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

 

posted @ 2017-06-14 22:50  覆手为云p  阅读(3022)  评论(0编辑  收藏  举报
停止精灵球