zoukankan      html  css  js  c++  java
  • Python中类的相关介绍

    本文主要介绍python中类的概念性内容,如类的定义、说明及简单使用

    1. 类的简单介绍

     1 # -*- coding:utf-8 -*-
     2 # Author:Wong Du
     3 
     4 '''
     5 ----- 编程范式 -----
     6 1、面向过程
     7     基本设计思路就是程序一开始是要着手解决一个大的问题,
     8     然后把一个大问题分解成很多个小问题或子过程,这些子过程
     9     再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。
    10 2、面向对象
    11     OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,
    12     使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单
    13 3、函数式编程
    14 
    15 Class类
    16     一个类即对具有相同属性的对象的抽象描述,如生物类(有生命体征的东西)
    17     1、经典类和新式类(深度优先和广度优先)
    18     2、构造函数(实例化时进行初始化),def __init__(self,...):
    19     3、类变量和实例变量(存放位置、节省空间等)
    20     4、析构函数(实例结束或程序结束是执行,用于做一些收尾工作)def __del__(self):
    21     5、静态属性和动态属性
    22 Object对象
    23     一个具体的对象,类实例化后就是一个对象
    24 Encapsulation封装
    25     在类中数据变更、内部方法调用等对外部用户都是透明的,
    26     这使类编程一个容器或胶囊,里面包含着类的数据和方法,用户不可感知
    27     封装方法:
    28         在类中变量名或方法名前加两个下划线即可
    29         如:__n、def __tell():
    30 Inheritance继承
    31     一个类可以派生出多个子类,继承父类的部分内容
    32     1、继承格式,class zi(fu):
    33     2、继承中构造函数的执行规则及顺序(只执行一个,先内后外)
    34     3、获取父类构造函数的初始化实例变量并在子类中新增变量的两种方法
    35         ① fu.__init__(self,a,b)
    36         ② super(zi,self).__init__(a,b)
    37 Polymorphism多态
    38     一个接口,多种调用
    39 '''
    40 
    41 class People:
    42     '''
    43     类的基本介绍
    44     类的定义,类名格式一般首字母大写,此为经典类,
    45     py3,多继承为广度优先
    46     '''
    47     __Author__ = "CaiYun"     # 类变量
    48     __Name = "Person"       # 类私有变量
    49     def __init__(self,name,age,addr,__priaddr='隐私'):      # 构造函数,用于初始化实例变量
    50         self.name = name    # 实例变量
    51         self.age = age
    52         self.addr = addr
    53         self.priaddr = __priaddr    # 实例私有变量
    54 
    55 
    56     # def __str__(self):      # 通过打印类实例化后的实例名来调用,如p=People();print(p)
    57     #     return '''
    58     #     -----People info-----
    59     #         Name: %s
    60     #         Age: %s
    61     #         Addr: %s''' %(self.name,self.age,self.addr)
    62 
    63     # def __del__(self):        # 析构函数,用于做一下收尾工作
    64     #     print("""
    65     #     -----实例化了一个对象-----
    66     #         Object: %s
    67     #         Name: %s
    68     #         Age: %s
    69     #         Addr: %s""" %(self,self.name,self.age,self.addr))
    70     #     print("程序结束时执行...")
    71 
    72     def __privileges(self):        # 在方法名前加"两个下划线",则将方法私有化
    73         print("这是一个私有方法,做一些私密的事情,外界不可感知。")
    74         pass
    75     def public(self):
    76         print("这是一个公有方法。外界可直接调用")
    77         pass
    78 
    79 class Man(People):      # 新式类
    80     def __init__(self,name,age,addr,sex):
    81         # People.__init__(self,name,age,addr)   # 使用父类定义相关变量,不建议使用这种方法
    82         super(Man,self).__init__(name,age,addr)     # 使用父类定义相关变量,建议使用这种方法
    83         self.sex = sex
    84         pass
    85     def shopping(self):
    86         print("%s 要去购物了..." %self.name)
    87 
    88 
    89 p = People("Wong",23,"深圳")
    90 # print(p.__Author__)
    91 # print(p)
    92 # p.__privileges()
    93 p.public()
    94 # print(p.__priaddr)
    95 
    96 m = Man("Wong",23,"深圳",'boy')
    97 print(m.name,m.age,m.sex)
    98 m.shopping()

    2. 类的继承

    # -*- coding:utf-8 -*-
    # Author:Wong Du
    
    class SchoolMember(object):
        '''
        学校成员基类,用于被继承创建各类学校成员
        '''
        MemberCount = 0
        SchMem_list = []
        def __init__(self, name, age, id=None):
            '''
            构造函数,初始化基础环境变量
            :param name:
            :param age:
            :param id:
            '''
            self.name = name
            self.age = age
            self.id = id
    
        def tell(self):
            '''介绍方法'''
            pass
    
        def enroll(self):
            '''
            注册方法,用于统计注册人员信息
            :return:
            '''
            SchoolMember.MemberCount += 1
            print("33[32;1m SchoolMember [%s] is enrolled, now there are [%s] members33[0m"
                  %(self.name,SchoolMember.MemberCount))
            self.SchMem_list.append(self)
    
        # def __del__(self):
        #     '''析构函数'''
        #     print("33[31;1m SchoolMember [%s] has resigned! 33[0m" %self.name)
    
    class Teather(SchoolMember):
        '''
        教师成员,继承父类SchoolMember,
        用于创建学校成员:教师
        '''
        def __init__(self, name, age, course, salary, tid=None):
            '''
            构造函数,创建初始化教师信息
            :param name:
            :param age:
            :param course:
            :param salary:
            :param tid:
            '''
            super(Teather, self).__init__(name, age)
            self.course = course
            self.salary = salary
            self.tid = tid
            self.enroll()
    
        def tell(self):
            '''介绍方法'''
            print("33[33;1m Hi, I am your [%s] course teather, my name is [%s], nice to meet you...33[0m"
                  %(self.course, self.name))
    
        def teching(self):
            '''教授课程说明'''
            print("33[34;1m Teacher [%s] is teching the [%s] course...33[0m" %(self.name, self.course))
    
    class Student(SchoolMember):
        '''
        学生成员,继承父类SchoolMember,
        用于创建学校成员:学生
        '''
        def __init__(self, name, age, grade, sid=None):
            super(Student, self).__init__(name, age)
            self.grade = grade
            self.sid = sid
            self.enroll()
    
        def tell(self):
            '''自我介绍方法'''
            print("33[33;1m Hi, My name is [%s], nice to meet you...33[0m" %self.name)
    
    t1 = Teather('Yangyue','37','数学','10000')
    t2 = Teather('Zhaoyun','28','武术','12000')
    
    s1 = Student('Caiyun','23','Python')
    s2 = Student('Dudu','22','数学')
    
    t1.tell()
    t2.teching()
    s1.tell()
    print(len(SchoolMember.SchMem_list))
    # print(SchoolMember.SchMem_list[1].name)
    for i in range(len(SchoolMember.SchMem_list)):
        print(SchoolMember.SchMem_list[i].name)
    类的继承

    3. 类的多态

    # -*- coding:utf-8 -*-
    # Author:Wong Du
    
    class Conpany(object):
        def __init__(self,type,name,money):
            self.type = type
            self.name = name
            self.money = money
    
    class Menber(object):
        def __init__(self,post,name):
            self.post = post
            self.name = name
        @staticmethod
        def Polymorphism(obj):
            obj.work()
    
    class Boss(Menber):
        def work(self):
            print('Boss')
    
    
    class HR(Menber):
        def work(self):
            print('HR')
    c1 = Conpany("电商", "云云易购", "10000000")
    
    
    h1 = HR('HR','wanchun')
    b1 = Boss('Boss','caiyun')
    
    Menber.Polymorphism(h1)
    Menber.Polymorphism(b1)
    类的多态
  • 相关阅读:
    Cleve Moler MATLAB 创始人金秋10月中国大学校园行
    [原]ASP.NET中使用JQUERYEASYUI后,解决ClientScript.RegisterStartupScript 所注册脚本执行两次
    [原]ASP.NET中使用后端代码注册脚本 生成JQUERYEASYUI 的界面错位
    [原]jqueryeasyui 关闭tab如何自动切换到前一个tab
    [原创]C# 实例Oracle 备份,带进度提示
    停止Oracle 服务开机自动重启
    最新县及县以上行政区划代码(截止2009年12月31日)
    单元测试学习:无返回值,触发委托
    [笔记]GetRequestStream()超时问题(出现假死,卡住)
    asp.net 页面 css中图片不存在引发的异常
  • 原文地址:https://www.cnblogs.com/Caiyundo/p/9480346.html
Copyright © 2011-2022 走看看