• day10_python学习笔记_chapter13_面向对象编程


    1. class NewClass(parent):

        def ....    如果没有父类, 则默认继承object类

    2. 类属性访问(类似java中的静态属性和方法)直接用类名.属性名, 在python中, 如果没有创建实例, 方法不能被调用。方法必须绑定到一个实例才能直接被调用。

      class C(object):

        foo = 100  访问 C.foo 

    3. 特殊的类属性: C.__name__, C.__doc__ , C.__bases__, C.__dict__ , C.__module__, C.__class__

    4. 在定义方法时,会传入一个self参数, 这个参数代表实例对象本身, 当用实例调用方法时,由解释器传递给方法。

      def func(self, arg1, arg2...)

    5. __init__, __new__, __del__

    6. 如果定义了构造器,则它不能返回任何对象, 只能返回None

    7. 类属性vs实例属性: 类属性可以通过类名.属性名访问, 也可以通过实例.属性名来访问, 类属性只能通过类引用才能更新属性值, 不能通过实例名来更新

      eg: class C(object):

          m = 1

         c = C()

         c.m = 2 并不能更改类属性的值。只是创建了一个新的实例属性。 此时c.m = 2

         del c.m  此时c.m = 1 

    给一个与类属性同名的实例属性赋值会有效地隐藏类属性,但当删除了这个实例属性时,实例又可以重新访问到类属性。

    8. 当在类属性可变的情况下,与上面7的情况就不同了。

      eg: class D(object):

          dict1 = {2003: 'aaa'}

         d = D()

         d.dict1 = {2003: 'aaa'}

         d.dict1[2004] =  'bbb'

         此时d.dict1 = {2003: 'aaa', 2004: 'bbb'}  对于类属性可变的情况下(字典,列表),实例可以修改类属性。

    9. 绑定:方法必须绑定到实例,才能够被调用。

    10. 静态方法和类方法, staticmethod(func), classmethod(func),也可以通过函数修饰符,@staticmethod, @classmethod

      >>> class STM:
        def foo():

       @staticmethod
            print 'static ....'
        foo = staticmethod(foo)
    >>> class CM:

      @classmethod
        def foo(cls):
            print 'class ...'
        foo = classmethod(foo)
    11. 继承,   __bases__属性,查看父类,

        子类覆盖了父类中的方法后,再访问父类的原有方法: Parent.func(子类实例)

        eg: Class P(object):

            def foo(self):

              print 'parent... '

           class C(P):

            def foo(self):

              print 'child...'

           c = C()

          P.foo(c)  =====parent...

     或者在子类中显示调用基类的方法

      class C(P):

        def foo(self):

          P.foo(self)

          print 'child...'

    在子类为绑定时, 一个更好的方法是使用super()内建方法

      class C(P):

        def foo(self):

          super(C, self).foo()

          print 'child...'

    12. 重写__init__不会自动调用父类的__init__的方法,与java不同

     13. 类,实例常用的内建函数, issubclass(sub, sup), isinstance(obj1, obj2), hasattr(), getattr(), setattr(), delattr(), dir(), super(), vars ==       __dict__

  • 相关阅读:
    visualSVNYou don't have permission to access on this server
    怎样截取Http请求
    ASP.NET @page 指令详解
    我的XMLHelperC# XML操作基类(修改,删除,新增,创建)
    最新Visual Studio 2010 下载及学习资料
    redis主从哨兵和集群的区别
    uniapp nvue 支持iconfont
    Error (Error Code: 1175) during executing update command on table using MySQL
    org.apache.jasper.JasperException: Unable to compile class for JSP
    java.sql.SQLException: Access denied for user 'root'@'10.10.10.10' (using password: YES)
  • 原文地址:https://www.cnblogs.com/yongpan666/p/3735111.html
Copyright © 2020-2023  润新知