python面向对象编程小结

这个是跟着教程一步一步走过来的,所以记下自己学习的过程。

一、类基础

1、类的定义

class <类名>:

    <其他语句>

class <类名>(父类名):

    <其他语句>


  
>>> class human:   ...     age=0  ...     sex=''  ...     name = ''  ...   >>> class student(human):   ...     school = ''  ...     number = 0  ...     grade = 0  ...   >>>  

2、类的使用

如果直接使用类名修改其属性,那么将影响已经实例化的对象。


  
>>> class A:   ...     name = 'A'  ...     num = 2  ...   >>> A.name   'A'  >>> a = A()       #实例化a对象   >>> a.name   'A'  >>> A.name = 'B'  >>> A.name   'B'  >>> a.name   'B'  >>>  

二、类的属性和方法

1、类的属性:

如果类的属性是以两条下划线开始则该属性为类的私有属性,不能在类外部被访问。

私有属性的命名形式: __privateAttrs 

如果在类内部的方法中使用类的私有属性,则应该以如下方式调用。

self.__privateAttrs


  
>>> class book:&nbsp;&nbsp;    ...&nbsp;&nbsp;&nbsp;&nbsp; __author = ''&nbsp;    ...&nbsp;&nbsp;&nbsp;&nbsp; __name = ''&nbsp;    ...&nbsp;&nbsp;&nbsp;&nbsp; __page = 0&nbsp;    ...&nbsp;&nbsp;&nbsp;&nbsp; price = 0&nbsp;    ...&nbsp;&nbsp;    >>> a = book()&nbsp;&nbsp;    >>> a.__author&nbsp;&nbsp;    Traceback (most recent call last):&nbsp;&nbsp;    &nbsp; File "<stdin>", line 1, in <module>&nbsp;&nbsp;    AttributeError: book instance has no attribute '__author'&nbsp;    >>> a.price&nbsp;&nbsp;    0&nbsp;    >>>  

2、类的方法

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

且'self'必须为第一个参数。和类的私有属性命名相同,类的私有方法名也要以两条下划线开始。


  
>>> class book:   ...     __author = ''  ...     __name = ''  ...     __page = 0  ...     price = 0  ...     def show(self):   ...             print self.__author   ...             print self.__name   ...     def setname(self,name):   ...             self.__name = name   ...   >>> a = book()   >>> a.show()       >>> a.setname('Tom')   >>> a.show()     Tom   >>>  

在python中有一类以两条下划线开始并且以两条下划线结束的类方法,称之为专有方法。

__init__  构造函数,生成对象时调用

__del__  析构函数,释放对象时调用

__add__ 加运算

__mul__  乘运算

__cmp__ 比较运算

__repr__ 打印、转换

__setitem__ 按照索引赋值

__getitem__ 按照索引获取值

__len__ 获得长度

__call__ 函数调用


  
>>> class book:   ...     __author = ''  ...     __name = ''  ...     __page = ''  ...     price = 0  ...     def __check(self,item):   ...             if item == '':   ...                     return 0  ...             else:   ...                     return 1  ...     def show(self):   ...             if self.__check(self.__author):   ...                     print self.__author   ...             else:   ...                     print 'No value'  ...             if self.__check(self.__name):   ...                     print self.__name   ...             else:   ...                     print 'No value'  ...     def setname(self,name):   ...             self.__name = name   ...     def __init__(self,author,name):   ...             self.__author = author   ...             self.__name = name   ...  

 三、类的继承

1)单继承

 


  
>>> class parent:   ...     __a = ''  ...     __b = 0  ...     def __init__(self,a,b):   ...             self.__a = a   ...             self.__b = b   ...     def show(self):   ...             print self.__a   ...             print self.__b   ...   >>> a = parent('a',2)   >>> a.show()   a   2  >>> class child(parent):   ...     __c = ''  ...     __d = 4  ...     def showinfo(self):   ...             self.show()   ...   >>> b = child('c',3)   >>> b.show()   c   3  >>> b.showinfo()   c   3  >>>  

 2)多重继承

 


  
# -*- coding:utf-8 -*-    class A:       #定义类A    name = 'A'     __num = 1   def show(self):     print self.name     print self.__num    def setnum(self,num):     self.__num = num   class B:        #定义类B    nameb = 'B'   __numb = 2   def show(self):     print self.nameb     print self.__numb    def setname(self,name):     self.__name = name   class C(A,B):    def showall(self):     print self.name     print self.nameb    show = B.show      #在这里表明show方法为B类的show方法,后来修改加上的     >>> import jicheng   >>> a = jicheng.A()   >>> a.show()   A   1  >>> c = jicheng.C()   >>> c.showall()   A   B   >>> c.show()  #默认调用A类的show方法   A   1  >>> reload(jicheng)   #修改jicheng.py后重新加载   <module 'jicheng' from 'jicheng.py'>   >>> d =jicheng.C()   >>> d.show()   B   2  >>>  

 五)重载

1)方法的重载实际上就是在类中使用def关键字重载父类的方法。如果重载父类中的方法,但又需要

在类中使用父类的该方法,可以使用父类名加‘ .’加方法名的形式调用。

 


  
# -*- coding:utf-8 -*-      class Mylist:          __mylist = []          def __init__(self,*args):                   self.__mylist = []              for arg in args:                  self.__mylist.append(arg)           def __add__(self,n):            #重载‘+’运算符              for i in range(0, len(self.__mylist)):                  self.__mylist[i] = self.__mylist[i] + n           def show(self):              print self.__mylist                >>> import chongzai      >>> L = chongzai.Mylist(1,2,3,4,5)      >>> L.show()      [1, 2, 3, 4, 5]      >>> L + 2     >>> L.show()      [3, 4, 5, 6, 7]      >>>   

 

本文出自 “乔磊的博客 学习 进步” 博客,请务必保留此出处http://sucre.blog.51cto.com/1084905/382766

转载于:https://my.oschina.net/sucre/blog/296222

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值