zoukankan      html  css  js  c++  java
  • Python:笔记(3)——面向对象编程

    Python:笔记(3)——面向对象编程

    类和面向对象编程

    1、类的创建

      

    说明:和Java不同的是,我们不需要显示的说明类的字段属性,并且可以在后面动态的添加。

    2、构造函数

      构造函数的功能毋庸置疑,可以让我们在定义对象的时候执行一些必要的初始化,在Python中我们通过__init__方法来实现

      

    说明:这里有一些需要注意的地方

    首先,关于self参数

    其次,实现访问控制

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

     3、关于继承

      关于继承的好处,主要是避免一些重复的代码工作,这个也无需多言,我们看一下,在Python中

      

      当然,我们也可以重写父类的一些方法,来定制功能

      

      同样,这里也可以体验一下“多态”,比如run_twice()方法,可以打印Dog、Cat的信息两次,其实这里传入任何对象都是可以的,只要有run方法即可!

      

    说明:Python允许多重继承

    class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
        pass

    4、获取对象信息

      类似于Java中的反射,可以窥探对象的信息

      

    5、使用__slots__限制实例属性

      Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性

      

    6、@Property

      在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改

    s = Student()
    s.score = 9999
    

      但是在Python中,把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作:

       

    7、JSON

      简单演示DICT的JSON编码和解码。

      

      但是,对象不能直接转换!需要写成如下格式。

      

    类型与对象

    术语

      程序中存储的所有数据都是对象。每个对象都有一个身份、一个类别和一个值。

    如:a=42,就是用值42创建了一个整数对象。

      大多数对象都拥有大量特点的属性和方法。

    • 属性就是与对象相关的值。
    • 方法就是被调用时将在对象上执行某些操作的函数。
    • 使用 . 运算符可以访问属性和方法。

    Python中对象的一些说明

    1. 检查对象类型最佳的方式是利用内置函数 isinstance(object,type)
    2. 所有对象都有引用计数,当一个对象的引用计数归零时,他将会被垃圾收集机制处理掉。
    3. 对于像字符串和数字这样的不可变对象,a=b,实际上是创建了一个新的副本。
    4. 浅复制将创建一个新对象,但是它里面包含的值是对原始对象中包含的项的引用
    5. 深复制将创建一个新对象,并且递归地复制它所包含的所有对象。可以使用copy.deepcopy()函数完成该工作。
    6. Python中的所有对象都是第一类的,也就是说能够命名的所有对象都可以当做数据处理。

    演示浅层和深层复制  

    1 #深层复制
    2 import copy
    3 a=[1,2,[3,4]]
    4 b=copy.deepcopy(a)
    5 b[2][0] =-100
    6 print(b)
    7 print(a)
    
    【结果】:
    [1, 2, [-100, 4]]
    [1, 2, [3, 4]]
     1 # 浅层复制
     2 a=[1,2,[3,4]]
     3 b=list(a) #创建a的一个浅复制
     4 print(b is a)
     5 b.append(100)
     6 print(b)
     7 print(a)
     8 b[2][0]=-100
     9 print(b)
    10 print(a)
    
    【结果】:
    False
    [1, 2, [3, 4], 100]
    [1, 2, [3, 4]]
    [1, 2, [-100, 4], 100]  
    [1, 2, [-100, 4]]
  • 相关阅读:
    C++学习笔记(十六):友元
    C++学习笔记(十五):异常
    C++学习笔记(十四):模板
    C++学习笔记(十三):类、包和接口
    C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类
    C++学习笔记(十一):void*指针、类型转换和动态内存分配
    C++学习笔记(十):类
    quartz 实现调度任务 SchedulerManager
    Session 活化与钝化 与tomcat钝化驱动器
    web listener
  • 原文地址:https://www.cnblogs.com/MrSaver/p/8350612.html
Copyright © 2011-2022 走看看