zoukankan      html  css  js  c++  java
  • 四、面向对象编程

    提纲:面向对象的基本思想

      类与对象的关系

      类的结构与成员

      Python中的魔法函数

      按功能要求完成类的设计与实例化对象

    一切皆对象

    BIFS:

    type()返回数据类型 

    id()查看对象ID

    dir() 查看对象下变量及函数

    issubclass(), isinstance(), super(),类,实例,调父类

    hasattr(), getattr(), setattr(),delattr(), 类属性

    globals(), locals(), 全局与局部的名称空间

    import(), reload(),模块的导入与重载

    创建类:

    class关键字

    指定继承

    定义类的成员

      数据成员

        类变量

        实例对象

      方法成员

        类方法

        实例对象

    实例化类

    类的创建与初始化

    例子:

    完成一个学生类的设计

    能查看学生总人数,全部学生姓名,毕业分数标准,已经毕业学员数量

    实现考试方法,成绩分数如果大于60分代表其通过考试,分数计入该学员总分

    若该学员累计分数达到1000分钟,该学员即毕业

    实现查分方法,向该学员返回是否已经毕业,或者还差多少分数才能毕业

    实现查询所有已毕业学生数量的功能

    实现查询所有学生数量的功能

    实现查询所有学生姓名的功能

    class Student():
      student_total=0
      student_list=[]
      student_graduated=0
      pass_score=1000

    def __init__(self,name,age,gender):
      self.name=name
      self.age=age
      self.genger=gender
      self.score=0

      Student.student_total+=1
      Student.student_list.append(name)


    def exam(self,score):
      if score<60:
        return 'failed'
      else:
        self.score+=score
        str1='good, your score is now '+str(self.score)

      if self.score>=Student.pass_score:
      Student.student_graduated+=1

      return str1

    #david=Student('david',22,'male')
    #type(david)

      def check(self,): #只要是对象的方法,都要以self开头
        if self.score<Student.pass_score:
          return 'you have',Student.pass_score-self.score,'to achieve'
        else:
          return 'you have graduated'

      @classmethod
      def get_student_graduated(cls,): #cls ?
        return Student.student_graduated

      @classmethod
      def get_student_total(cls,): #cls ?
        return Student.get_student_total

      @classmethod
      def get_student_list(cls,): #cls ?
        return Student.get_student_list


      @staticmethod
      def static1():
        return'this is a static method form Student,it is can be called by both the class and the instance'
    xiaoming=Student('xiaoming',22,'male')
    xiaoming=Student('ximing',22,'male')


    Student.get_student_list()

    #有问题,未达到预期的效果

    <bound method Student.get_student_list of <class '__main__.Student'>>

    静态方法(普通方法):

      定义的时候使用@staticmethod装饰器

      静态方法没有参数限制,不需要实例参数self和类参数cls    cls是class的简写

      静态法可以通过类名访问,或者实例访问

     私有控制 双下划线 "__"

    魔术方法

    如果对象实现(重载)了这些方法中的某一个,那么错方法就会在特殊的情况下被Python所调用,

    定义自己想要的行为,这些会自动发生。

    经常是两个下划线包围来命名的。

    如:__init__

    当x=myclass的时候,__init__并不是第一个被调用的方法

    还有一个叫__new__的方法,来构造这个函数,同样,结束时也有一个 __del___方法

    class myclass():
      def __init__(self,):
        print('被__init__')

      def __del__(self,):
        print('被__del__')

    cl=myclass()
    del cl

     

     作业:

    完成简单类的设计

    新建类并修改其实例的切片访问

     

  • 相关阅读:
    Django Rest Swagger生成api文档
    django 完整日志配置
    django解决跨域请求的问题
    Django REST framework 自定义字段
    Django model 定义属性
    mysql server has gone away的原因
    也谈时间管理和GTD
    MySQL之thread cache
    MySQL之aborted connections和aborted clients
    TokuDB的特点验证
  • 原文地址:https://www.cnblogs.com/qianyuesheng/p/8431229.html
Copyright © 2011-2022 走看看