由于类的内容比较多,分为类-初级基础篇类-进阶篇

本节内容一览图:


一、类成员修饰符

每一个类的成员都有两种形式:

  • 公有成员,在任何地方都能访问
  • 私有成员,只能在类的内部才能访问

1.1、私有成员和公有成员的定义不同:

私有成员命名时,前两个字符是下划线。(特殊成员除外,例如:__init__、__call__、__dict__等)

前面提到过 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

例如:

  1. class C:
  2.  
  3.     def __init__(self):
  4.         self.name = '公有字段'
  5.         self.__foo = "私有字段"

1.2、私有成员和公有成员的访问限制不同

静态字段

  • 公有静态字段:类可以访问;类内部可以访问;派生类中可以访问
  • 私有静态字段:仅类内部可以访问;
  1. class C:
  2.  
  3. name = "公有静态字段"
  4.  
  5. def func(self):
  6. print C.name
  7.  
  8. class D(C):
  9.  
  10. def show(self):
  11. print C.name
  12.  
  13. C.name # 类访问
  14.  
  15. obj = C()
  16. obj.func() # 类内部可以访问
  17.  
  18. obj_son = D()
  19. obj_son.show() # 派生类中可以访问

公有静态字段

  1. class C:
  2.  
  3. __name = "公有静态字段"
  4.  
  5. def func(self):
  6. print C.__name
  7.  
  8. class D(C):
  9.  
  10. def show(self):
  11. print C.__name
  12.  
  13. C.__name # 类访问 ==> 错误
  14.  
  15. obj = C()
  16. obj.func() # 类内部可以访问 ==> 正确
  17.  
  18. obj_son = D()
  19. obj_son.show() # 派生类中可以访问 ==> 错误

私有静态字段

普通字段

  • 公有普通字段:对象可以访问;类内部可以访问;派生类中可以访问
  • 私有普通字段:仅类内部可以访问;

ps:如果想要强制访问私有字段,可以通过 【对象._类名__私有字段明 】访问(如:obj._C__foo),不建议强制访问私有成员。

  1. # 公有普通字段
  2. class Foo:
  3. def __init__(self, name):
  4. self.name = name
  5.  
  6. def f1(self):
  7. return self.name
  8.  
  9. obj = Foo("alex")
  10. print(obj.name)
  11. print(obj.f1())
  12.  
  13. # 私有普通字段
  14. class Foo:
  15. def __init__(self, name):
  16. self.__name = name
  17.  
  18. def f1(self):
  19. return self.__name
  20.  
  21. obj = Foo("alex")
  22. print(obj.f1())
  23. print(obj.__name)
  24.  
  25. # 继承的私有普通字段
  26. class Foo:
  27. def __init__(self, name):
  28. self.__name = name
  29.  
  30. def f1(self):
  31. return self.__name
  32.  
  33. class Bar(Foo):
  34.  
  35. def f2(self):
  36. return self.__name
  37.  
  38. obj = Bar("alex")
  39. print(obj.f1())
  40. print(obj.__name)
  41.  
  42. # 公有的静态字段
  43.  
  44. class Foo:
  45. cc = '123'
  46.  
  47. def __init__(self, name):
  48. self.__name = name
  49.  
  50. def f1(self):
  51. return self.__name
  52.  
  53. print(Foo.cc)
  54. # 私有的静态字段
  55. class Foo:
  56. __cc = '123'
  57.  
  58. def __init__(self, name):
  59. self.__name = name
  60.  
  61. @staticmethod
  62. def f1():
  63. return Foo.__cc
  64.  
  65. print(Foo.f1())
  66. print(Foo.__cc)
  67.  
  68. # 如何访问私有普通字段?
  69. class Foo:
  70. def __init__(self, name):
  71. self.__name = name
  72.  
  73. def f1(self):
  74. return self.__name
  75.  
  76. obj = Foo("alex")
  77. # print(obj.f1())
  78. print(obj._Foo__name)

公有的私有的字段定义及调用

方法、属性的访问于上述方式相似,即:私有成员只能在类内部使用

  1. class C:
  2.  
  3. def __init__(self):
  4. self.foo = "公有字段"
  5.  
  6. def func(self):
  7. print self.foo  # 类内部访问
  8.  
  9. class D(C):
  10.  
  11. def show(self):
  12. print self.foo # 派生类中访问
  13.  
  14. obj = C()
  15.  
  16. obj.foo # 通过对象访问
  17. obj.func() # 类内部访问
  18.  
  19. obj_son = D();
  20. obj_son.show() # 派生类中访问

公有字段

  1. class C:
  2.  
  3. def __init__(self):
  4. self.__foo = "私有字段"
  5.  
  6. def func(self):
  7. print self.foo  # 类内部访问
  8.  
  9. class D(C):
  10.  
  11. def show(self):
  12. print self.foo # 派生类中访问
  13.  
  14. obj = C()
  15.  
  16. obj.__foo # 通过对象访问 ==> 错误
  17. obj.func() # 类内部访问 ==> 正确
  18.  
  19. obj_son = D();
  20. obj_son.show() # 派生类中访问 ==> 错误

私有字段

ps:非要访问私有属性的话,可以通过 对象._类__属性名

:关于静态字段和普通字段的解释可以在上一节查找

补充:访问限制

Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问

如果一个属性以"__xxx__"的形式定义,那它又可以被外部访问了,以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。

以单下划线开头的属性"_xxx"虽然也可以被外部访问,但是,按照习惯,他们不应该被外部访问。

二、类的特殊方法 

上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段、方法和属性三大 类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用。无论人或事物往往都有不按套路出牌的情况,Python的类 成员也是如此,存在着一些具有特殊含义的成员,详情如下:

注意:下文的__都是双下划线

1、__doc__

功能:表示类的描述信息

  1. class Foo:
  2. """描述类的信息"""
  3. def __init__(self, name):
  4. self.name = name
  5.  
  6. def show(self):
  7. print(self.name)
  8.  
  9. obj = Foo.__dict__

案例

2、__module__和__class__

功能:

__module__ 表示当前操作的对象在哪个模块

__class__    表示当前操作的对象的类是什么

  1. # lib/aa.py
  2. #!/usr/bin/env python
  3. # -*- coding:utf-8 -*-
  4.  
  5. class C:
  6.  
  7. def __init__(self):
  8. self.name = 'wupeiqi'
  9.  
  10. # ################################
  11. from lib.aa import C
  12.  
  13. obj = C()
  14. print obj.__module__ # 输出 lib.aa,即:输出模块
  15. print obj.__class__ # 输出 lib.aa.C,即:输出类

案例

3、__init__

功能:构造方法,通过类创建对象时,自动触发执行

对象实例化的过程
创建类的对象---------------------->初始化对象
def __new__(cls)                  def __init__(self)
注意:__new__(cls)有一个返回值

  1. class Foo:
  2.  
  3. def __init__(self, name):
  4. self.name = name
  5. self.age = 18
  6.  
  7. obj = Foo('sfs') # 自动执行类中的 __init__ 方法

案例

4、__del__

功能:析构方法,当对象在内存中被释放时,自动触发执行

注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

  1. class Foo:
  2.  
  3. def __del__(self):
  4. pass

案例

 5、__call__

功能:对象后面加括号,触发执行

注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

  1. class Foo:
  2.  
  3. def __init__(self):
  4. pass
  5.  
  6. def __call__(self, *args, **kwargs):
  7.  
  8. print '__call__'
  9.  
  10. obj = Foo() # 执行 __init__
  11. obj() # 执行 __call__

案例

6、__dict__

功能:类或对象中的所有成员

注:类的普通字段属于对象,类中的静态字段和方法等属于类,即:

  1. class Province:
  2.  
  3. country = 'China'
  4.  
  5. def __init__(self, name, count):
  6. self.name = name
  7. self.count = count
  8.  
  9. def func(self, *args, **kwargs):
  10. print 'func'
  11.  
  12. # 获取类的成员,即:静态字段、方法、
  13. print Province.__dict__
  14. # 输出:{'country': 'China', '__module__': '__main__', 'func': <function func at 0x10be30f50>, '__init__': <function __init__ at 0x10be30ed8>, '__doc__': None}
  15.  
  16. obj1 = Province('HeBei',10000)
  17. print obj1.__dict__
  18. # 获取 对象obj1 的成员
  19. # 输出:{'count': 10000, 'name': 'HeBei'}
  20.  
  21. obj2 = Province('HeNan', 3888)
  22. print obj2.__dict__
  23. # 获取 对象obj1 的成员
  24. # 输出:{'count': 3888, 'name': 'HeNan'}

案例

7、__str__和__repr__

功能:如果一个类中定义了__str__方法,那么在打印对象时,默认输出改方法的返回值

  1. class Foo:
  2.  
  3. def __str__(self):
  4. return 'wupeiqi'
  5.  
  6. obj = Foo()
  7. print obj
  8. # 输出:wupeiqi

案例

补充:

Python 定义了__str__()__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。

8、__getitem__、__setitem__、__delitem__

功能:用于索引操作,如字典。以上分别表示获取、设置、删除数据

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3.  
  4. class Foo(object):
  5.  
  6. def __getitem__(self, key):
  7. print '__getitem__',key
  8.  
  9. def __setitem__(self, key, value):
  10. print '__setitem__',key,value
  11.  
  12. def __delitem__(self, key):
  13. print '__delitem__',key
  14.  
  15. obj = Foo()
  16.  
  17. result = obj['k1'] # 自动触发执行 __getitem__
  18. obj['k2'] = 'wupeiqi' # 自动触发执行 __setitem__
  19. del obj['k1'] # 自动触发执行 __delitem__

案例

9、__getslice__、__setslice__、__delslice__(Python 2.x中的方法,Python 3.X中使用__getitem__、__setitem__、__delitem__实现类似的功能)

功能:该方法用于分片操作,如:列表

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3.  
  4. class Foo(object):
  5.  
  6. def __getslice__(self, i, j):
  7. print '__getslice__',i,j
  8.  
  9. def __setslice__(self, i, j, sequence):
  10. print '__setslice__',i,j
  11.  
  12. def __delslice__(self, i, j):
  13. print '__delslice__',i,j
  14.  
  15. obj = Foo()
  16.  
  17. obj[-1:1] # 自动触发执行 __getslice__
  18. obj[0:1] = [11,22,33,44] # 自动触发执行 __setslice__
  19. del obj[0:2] # 自动触发执行 __delslice__

案例

10、__iter__

功能:用于迭代器,之所以列表、字典、元组可以进行for循环,是因为类型内部定义了 __iter__

  1. class Foo(object):
  2. pass
  3.  
  4. obj = Foo()
  5.  
  6. for i in obj:
  7. print i
  8.  
  9. # 报错:TypeError: 'Foo' object is not iterable

第一步

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3.  
  4. class Foo(object):
  5.  
  6. def __iter__(self):
  7. pass
  8.  
  9. obj = Foo()
  10.  
  11. for i in obj:
  12. print i
  13.  
  14. # 报错:TypeError: iter() returned non-iterator of type 'NoneType'

第二步

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3.  
  4. class Foo(object):
  5.  
  6. def __init__(self, sq):
  7. self.sq = sq
  8.  
  9. def __iter__(self):
  10. return iter(self.sq)
  11.  
  12. obj = Foo([11,22,33,44])
  13.  
  14. for i in obj:
  15. print i

第三步

从以上的执行内容可以看出,for循环迭代的其实是  iter([11,22,33,44]) ,所以执行流程可以变更为:

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3.  
  4. obj = iter([11,22,33,44])
  5.  
  6. for i in obj:
  7. print i
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3.  
  4. obj = iter([11,22,33,44])
  5.  
  6. while True:
  7. val = obj.next()
  8. print val

for循环的内部实现

11、__new__和__metaclass__

阅读如下代码:

  1. class Foo(object):
  2.  
  3. def __init__(self):
  4. pass
  5.  
  6. obj = Foo() # obj是通过Foo类实例化的对象

上述代码中,obj 是通过 Foo 类实例化的对象,其实,不仅 obj 是一个对象,Foo类本身也是一个对象,因为在Python中一切事物都是对象

如果按照一切事物都是对象的理论:obj对象是通过执行Foo类的构造方法创建,那么Foo类对象应该也是通过执行某个类的 构造方法 创建。

  1. print type(obj) # 输出:<class '__main__.Foo'> 表示,obj 对象由Foo类创建
  2. print type(Foo) # 输出:<type 'type'> 表示,Foo类对象由 type 类创建

所以,obj对象是Foo类的一个实例Foo类对象是 type 类的一个实例,即:Foo类对象 是通过type类的构造方法创建。

那么,创建类就可以有两种方式

方法1:普通方式

  1. class Foo(object):
  2.  
  3. def func(self):
  4. print 'hello wupeiqi'

方法2:特殊方式(type类的构造函数)

  1. def func(self):
  2. print 'hello wupeiqi'
  3.  
  4. Foo = type('Foo',(object,), {'func': func})
  5. #type第一个参数:类名
  6. #type第二个参数:当前类的基类
  7. #type第三个参数:类的成员

-->类是由type类实例化产生

那么问题来了,类默认是由 type 类实例化产生,type类中如何实现的创建类?类又是如何创建对象?

答:类中有一个属性 __metaclass__,其用来表示该类由 谁 来实例化创建,所以,我们可以为 __metaclass__ 设置一个type类的派生类,从而查看 类 创建的过程。

补充:

12.__cmp__

对 intstr 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法 __cmp__():

13.__len__

如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数


三、异常处理

1、异常基础

在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!!

1
2
3
4
try:
    pass
except Exception,ex:
    pass

需求:将用户输入的两个数字相加

  1. while True:
  2. num1 = raw_input('num1:')
  3. num2 = raw_input('num2:')
  4. try:
  5. num1 = int(num1)
  6. num2 = int(num2)
  7. result = num1 + num2
  8. except Exception, e:
  9. print '出现异常,信息如下:'
  10. print e

2、异常种类

python中的异常种类非常多,每个异常专门用于处理某一项异常!!!

1、name Error 变量没定义

2、Syntax Error  语法错误

3、IO Error 打开一个不存在的目录或文件

4.Zero DivisionError  10/0 除零错误,即零不可以当做分母】

5.a=int('dd') :Value Error 传入值无效

6.keyboard Interrupt  强制终止程序产生

  1. AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
  2. IOError 输入/输出异常;基本上是无法打开文件
  3. ImportError 无法引入模块或包;基本上是路径问题或名称错误
  4. IndentationError 语法错误(的子类) ;代码没有正确对齐
  5. IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
  6. KeyError 试图访问字典里不存在的键
  7. KeyboardInterrupt Ctrl+C被按下
  8. NameError 使用一个还未被赋予对象的变量
  9. SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
  10. TypeError 传入对象类型与要求的不符合
  11. UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
  12. 导致你以为正在访问它
  13. ValueError 传入一个调用者不期望的值,即使值的类型是正确的

常用异常

  1. ArithmeticError
  2. AssertionError
  3. AttributeError
  4. BaseException
  5. BufferError
  6. BytesWarning
  7. DeprecationWarning
  8. EnvironmentError
  9. EOFError
  10. Exception
  11. FloatingPointError
  12. FutureWarning
  13. GeneratorExit
  14. ImportError
  15. ImportWarning
  16. IndentationError
  17. IndexError
  18. IOError
  19. KeyboardInterrupt
  20. KeyError
  21. LookupError
  22. MemoryError
  23. NameError
  24. NotImplementedError
  25. OSError
  26. OverflowError
  27. PendingDeprecationWarning
  28. ReferenceError
  29. RuntimeError
  30. RuntimeWarning
  31. StandardError
  32. StopIteration
  33. SyntaxError
  34. SyntaxWarning
  35. SystemError
  36. SystemExit
  37. TabError
  38. TypeError
  39. UnboundLocalError
  40. UnicodeDecodeError
  41. UnicodeEncodeError
  42. UnicodeError
  43. UnicodeTranslateError
  44. UnicodeWarning
  45. UserWarning
  46. ValueError
  47. Warning
  48. ZeroDivisionError

更多异常

  1. dic = ["wupeiqi", 'alex']
  2. try:
  3. dic[10]
  4. except IndexError, e:
  5. print e

实例:IndexError

  1. dic = {'k1':'v1'}
  2. try:
  3. dic['k20']
  4. except KeyError, e:
  5. print e

实例:KeyError

  1. s1 = 'hello'
  2. try:
  3. int(s1)
  4. except ValueError, e:
  5. print e

实例:ValueError

对于上述实例,异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

 
1
2
3
4
5
6
7
# 未捕获到异常,程序直接报错
 
s1 = 'hello'
try:
    int(s1)
except IndexError,e:
    print e

所以,写程序时需要考虑到try代码块中可能出现的任意异常,可以这样写:

  1. s1 = 'hello'
  2. try:
  3.     int(s1)
  4. except IndexError,e:
  5.     print e
  6. except KeyError,e:
  7.     print e
  8. except ValueError,e:
  9.     print e

万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:

  1. s1 = 'hello'
  2. try:
  3.     int(s1)
  4. except Exception,e:
  5.     print e

接下来你可能要问了,既然有这个万能异常,其他异常是不是就可以忽略了!

答:当然不是,对于特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行。

  1. s1 = 'hello'
  2. try:
  3.     int(s1)
  4. except KeyError,e:
  5.     print '键错误'
  6. except IndexError,e:
  7.     print '索引错误'
  8. except Exception, e:
  9.     print '错误'

3、异常其他结构

  1. try:
  2.     # 主代码块
  3.     pass
  4. except KeyError,e:
  5.     # 异常时,执行该块
  6.     pass
  7. else:
  8.     # 主代码块执行完,执行该块
  9.     pass
  10. finally:
  11.     # 无论异常与否,最终执行该块
  12.     pass

4、主动触发异常

  1. try:
  2.     raise Exception('错误了。。。')
  3. except Exception,e:
  4.     print e

5、自定义异常

  1. class WupeiqiException(Exception):
  2.  
  3.     def __init__(self, msg):
  4.         self.message = msg
  5.  
  6.     def __str__(self):
  7.         return self.message
  8.  
  9. try:
  10.     raise WupeiqiException('我的异常')
  11. except WupeiqiException,e:
  12.     print e

6、断言

  1. # assert 条件
  2.  
  3. assert 1 == 1
  4.  
  5. assert 1 == 2

四、反射

python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员。

  1. class Foo(object):
  2.  
  3.     def __init__(self):
  4.         self.name = 'wupeiqi'
  5.  
  6.     def func(self):
  7.         return 'func'
  8.  
  9. obj = Foo()
  10.  
  11. # #### 检查是否含有成员 ####
  12. hasattr(obj, 'name')
  13. hasattr(obj, 'func')
  14.  
  15. # #### 获取成员 ####
  16. getattr(obj, 'name')
  17. getattr(obj, 'func')
  18.  
  19. # #### 设置成员 ####
  20. setattr(obj, 'age', 18)
  21. setattr(obj, 'show', lambda num: num + 1)
  22.  
  23. # #### 删除成员 ####
  24. delattr(obj, 'name')
  25. delattr(obj, 'func')
  1. 反射
  2.     getattr(obj,str) #### 获取成员 ####
  3.     setattr(obj,str,val) #### 设置成员 ####
  4.     hasattr(obj,str) ### 检查是否含有成员 ####
  5.     delattr(obj,str)  #### 删除成员 ####

个人笔记

结论:反射是通过字符串的形式操作对象相关的成员。一切事物都是对象!!!

 个人总结:

  1. 异常处理
  2. try:
  3. # 主代码块
  4. pass
  5. except KeyError as e:
  6. # 异常时,执行该块
  7. pass
  8. else:
  9. # 主代码块执行完,执行该块
  10. pass
  11. finally:
  12. # 无论异常与否,最终执行该块
  13. pass
  14. ################################################
  15. try
  16.     ...
  17. except (ValueError,KeyError),#in 2.7写法
  18. except (ValueError,KeyError) as e : 3.x写法
  19.  
  20. except Exception as e:放在异常处理最后面,
  21.  
  22. else: #没发生异常,就执行
  23.  
  24. finally, 无论如何都执行
  25.  
  26. raise ValueError


四.销毁对象(垃圾收集)   --补充知识

Python自动删除不需要的对象(内置类型或类实例)以释放内存空间。 Python定期回收不再使用的内存块的过程称为垃圾收集。

Python的垃圾收集器在程序执行期间运行,当对象的引用计数达到零时触发。 对象的引用计数随着指向它的别名数量而变化。

当对象的引用计数被分配一个新名称或放置在容器(列表,元组或字典)中时,它的引用计数会增加。 当用del删除对象的引用计数时,引用计数减少,其引用被重新分配,或者其引用超出范围。 当对象的引用计数达到零时,Python会自动收集它。

  1. a = 40 # Create object <40>
  2. b = a # Increase ref. count of <40>
  3. c = [b] # Increase ref. count of <40>
  4. del a # Decrease ref. count of <40>
  5. b = 100 # Decrease ref. count of <40>
  6. c[0] = -1 # Decrease ref. count of <40>
Python

通常情况下,垃圾回收器会销毁孤立的实例并回收其空间。 但是,类可以实现调用析构函数的特殊方法__del__(),该方法在实例即将被销毁时被调用。 此方法可能用于清理实例使用的任何非内存资源。

五.类和运算符

1.利用魔术方法可以使运算符被Python的标准语法支持
2.比较运算符

__cmp__(self,other)    比较
__eq__(self,other)    处理等于
__lt__(self,other)    小于
__gt__(self,other)     大于

3.数字运算符

__add__(self,other)      加
__sub__(self,other)      减
__mul__(self,other)      乘
__div__(self,other)      除
4.逻辑运算符
__or__(self,other)       或
__and__(self,other)      和


声明:

本人在学习老男孩python自动化网络课程后,结合所学整理做次笔记,本文内容多出

Alex老师博客:http://www.cnblogs.com/alex3714/articles/5740985.html

武沛齐老师博客:http://www.cnblogs.com/wupeiqi/articles/5453708.html

感谢老男孩教育老师Alex,武沛齐老师,本文多从二位老师文章中结合整理

http://www.cnblogs.com/wupeiqi/p/4766801.html

http://www.yiibai.com/python/python_classes_objects.html

图解Python 【第六篇】:面向对象-类-进阶篇的更多相关文章

  1. Python学习记录之(五)-----类进阶篇

    静态方法 类方法 属性方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调 ...

  2. 【转】python 面向对象(进阶篇)

    [转]python 面向对象(进阶篇) 上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 ...

  3. Python之路,Day15 - Django适当进阶篇

    Python之路,Day15 - Django适当进阶篇   本节内容 学员管理系统练习 Django ORM操作进阶 用户认证 Django练习小项目:学员管理系统设计开发 带着项目需求学习是最有趣 ...

  4. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  5. python 面向对象(进阶篇)转载武沛齐

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  6. Python基础—面向对象(进阶篇)

    通过上一篇博客我们已经对面向对象有所了解,下面我们先回顾一下上篇文章介绍的内容: 上篇博客地址:http://www.cnblogs.com/phennry/p/5606718.html 面向对象是一 ...

  7. python之class面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  8. 【Python之路】特别篇--Python面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  9. python学习第十六天 --继承进阶篇

    这一章节主要讲解面向对象高级编程->继承进阶篇,包括类多继承介绍和继承经典类和新式类属性的查找顺序不同之处. 多继承 上一章节我们讲到继承,子类继承父类,可以拥有父类的属性和方法,也可以进行扩展 ...

随机推荐

  1. Flutter 34: 图解自定义 View 之 Canvas (一)

    小菜最近在学习自定义 View,刚了解了一下 Paint 画笔的神奇之处,现在学习一下 Canvas 画布的神秘之处.Flutter 提供了众多的绘制方法,小菜接触不深,尽量都尝试一下. Canvas ...

  2. 【Day4】3.urllib模块使用案例

    import urllib.request as ur ret = ur.urlopen('https://edu.csdn.net/').read() with open('edu.html','w ...

  3. Linux内核移植的若干问题

  4. 【异常】 Could not find Linker 'g++' in system path.

    1 详细异常 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':az-ex ...

  5. 判断一个python字符串中是否包含中文字符

    #在python中一个汉字算一个字符,一个英文字母算一个字符 #用 ord() 函数判断单个字符的unicode编码是否大于255即可. def is_contain_chinese(check_st ...

  6. ARM体系结构与编程读书笔记——处理器的寄存器

    ARM处理器共有37个寄存器,其中包括: 31个通用寄存器,包括程序计数器(PC)在内,寄存器都是32位: 6个状态寄存器,这些寄存器都是32位的,目前只使用了其中12位: 通用寄存器 可以分为下面3 ...

  7. 友善之臂NanoPC T4网络相关设置

    目前(2019年8月)NanoPC T4的桌面系统FriendlyDesktop是基于Ubuntu18.04进行集成的,因此大部分可以参考Ubuntu18.04的配置方法. 1.无线网络配置 可参考官 ...

  8. Spring入门篇——第1章 概述

    第1章 概述 本章对课程的情况进行介绍,并介绍框架和Spring概况. 1-1 Spring入门课程简介 1-2 Spring概况 1-3 Spring框架

  9. linux基础_使用指令3

    时间日期类 1.date指令 功能:显示当前日期 语法: date:显示当前时间 date +%Y:显示当前年份 date +%m:显示当前月份 date +%d:显示当前是哪一天 date &quo ...

  10. P5650 基础字符串练习题

    设定'0'权值为1,设定'1'权值为-1 然后就是最大子段和 #include <cstdio> #include <algorithm> #include <cstri ...