zoukankan      html  css  js  c++  java
  • 《Python 3.5从零开始学》笔记-第8章 面向对象编程

    前几章包括开启python之旅、列表和元组、字符串、字典、条件和循环等语句、函数等基本操作。主要对后面几章比较深入的内容记录笔记。

    第8章 面向对象编程

    8.3深入类

    #!/usr/local/bin/python3
    # -*- coding:utf-8 -*-
    class MyClass(object):
      i=123
      def f(self):
        return 'hello world'
    
    useClass=MyClass()
    print('类属性:',useClass.i)
    print('类方法:',useClass.f())
    
    #打印系统默认的编码
    import sys
    print(sys.getdefaultencoding())

      输入,必须用python3,如果用python的话,会打印出编码而不是中文:

    python3 class_test.py
    

      程序执行结果如下:

    类属性: 123
    类方法: hello world
    utf-8

      类中定义方法:第一个参数必须是self,其他和普通函数一样。

      类中调用方法:实例变量上直接调用,除了self不用传递,其他参数正常传入。 

      类对象支持两种操作:属性引用(obj.name,obj代表类对象,name代表属性)、实例化。

      

      类的构造方法

      若类不显式地定义一个__init__()方法,则程序默认调用一个无参的__init__()方法。一个类中可定义多个构造方法,但是后面的构造方法会覆盖前面的构造方法,只能根据最后一个构造方法的形式进行实例化。建议一个类中只定义一个构造函数。

    #!/usr/local/bin/python3
    # -*- coding:utf-8 -*-
    class MyClass(object):
      i=123
      def __init__(self.name):
        self.name = name
      def f(self):
        return 'hello '+self.name
    
    useClass=MyClass('angela')
    print('类属性:',useClass.i)
    print('类方法:',useClass.f())

      输出:

    类属性: 123
    类方法: hello angela

     

      类的访问权限

    #!/usr/local/bin/python3
    # -*- coding:utf-8 -*-
    class Student(object):
      def __init__(self,name):
        self.name = name
      def info(self):
        print('hello '+self.name)
    
    stu=Student('angela')
    print('修改前的姓名:',stu.name)
    stu.info()
    #可以在类外部修改类的内部属性 stu.name
    = 'andrew' print('修改后的姓名:',stu.name) stu.info()

      输出:

    修改前的姓名: angela
    hello angela
    修改后的姓名: andrew
    hello andrew

      如上,可以在类外部修改类的内部属性。要让内部属性不让外部访问,属性名称前加两个下划线,self.__name

      如何访问类的私有变量:

    #!/usr/local/bin/python3
    # -*- coding:utf-8 -*-
    class Student(object):
      def __init__(self,name):
        self.__name = name
      def info(self):
        print('hello '+self.__name)
      def getName(self):
        return self.__name
      def setName(self,name):
        self.__name = name
    
    stu=Student('angela')
    print('修改前的姓名:',stu.getName())
    stu.info()
    
    stu.setName('andrew')
    print('修改后的姓名:',stu.getName())
    stu.info()

      输出:

    修改前的姓名: angela
    hello angela
    修改后的姓名: andrew
    hello andrew

      这样,setName()修改内部属性时可以参数检查,如果传入参数不满足条件,就处理异常。

      类的私有方法和私有变量类似,def __setName(self, name)。通过公有方法调用私有方法,self.__setName('Andrew')。

    8.4继承

    多态

    封装

    多重继承

    参考资料:

    python3编码问题

    python编码

    参考资料:

    python tutorial 3.6

    Python博客

    python多态

  • 相关阅读:
    spring boot 整合elasticsearch
    elasticsearch 高级查询
    elasticsearch 基本操作
    day9--回顾
    day9--多线程与多进程
    day9--paramiko模块
    day10--异步IO数据库队列缓存
    数据库连接池
    数据库事务的四大特性以及事务的隔离级别
    使用JDBC进行数据库的事务操作(2)
  • 原文地址:https://www.cnblogs.com/AndrewYin/p/9309917.html
Copyright © 2011-2022 走看看