zoukankan      html  css  js  c++  java
  • Python (7)——方法的分类及抽象类

    类的分类


    类和对象的方法一共分为四种:

    1.实例方法/对象方法

    只有实例化对象之后才可以使用的方法,该方法的第一个形参接收的一定是对象本身!
    

    2.绑定类的方法

    3.静态方法

    无需实例化,可以通过类直接调用的方法,方法中的参数既不接收对象名也不接受类。 一般方法可以独立调用,跟类中其他成员关联不大
    

    4.类方法

    无需实例化,可以通过类直接调用的方法
    但是方法的第一个参数接收的一定是类本身,这种方法一般情况下需要借助类中其他成员操作
    #方法的分类
    #包含各种方法的类
    class Human:
        #属性
        sex = 'man'
        age = 18
    
        #方法
        #绑定类的方法
        def say():
            print('听说一个遥远的传说')
        #非绑定类的方法(对象方法)
        def drink(self):
            print('喝农夫山泉有点甜')
    
        #类方法
        @classmethod
        def eat(cls):
            print(cls)
            print('吃个大西瓜')
    
        #静态方法
        @staticmethod
        def play():
            print('玩耍真快乐')
    
    #类的调用
    #绑定类的方法
    Human.say()
    
    #非绑定类的方法
    Human.drink(1)
    hb = Human()
    hb.drink()
    
    #类方法
    Human.eat()
    
    #静态方法
    Human.play()
    hb.play()

    抽象类


    抽象类:具有抽象方法的类就是抽象类。

    抽象方法:就是没有完成的方法。只有方法名称和参数,没有方法内容的方法。

    作用:适合于领导指定开发规范及多人协作完成类。

    abc abstract class 抽象类的缩写

        

    抽象类的特征


    1.抽象类中可以包含具体的方法也可以包含抽象方法
    2.抽象类中可以包含成员属性,而且属性没有抽象不抽象之分
    3.抽象类无法实例化使用.
    4.抽象类只能被其他类继承使用,(唯一的用法)
    5.只有子类实现了抽象类的所有抽象方法之后,该子类才可以正常实例化使用。有一个抽象方法没有实现都不可以实例化
    6.抽象类的作用是指定程序开发的标准(方法名,参数等)


    抽象类的语法


    #使用抽象类必须使用abc模块
    import abc
    
    #书写抽象类必须指定抽象类的元类  固定格式
    class Human(metaclass = abc.ABCMeta):
    
        #定义一个抽象的实例方法/非绑定类的方法
        @abc.abstractmethod
        def smoking(self):
            pass
    
        #定义一个抽象的类方法
        @abc.abstractclassmethod
        def say(cls):
            pass
    
        #定义一个抽象的静态方法/绑定类的方法
        @abc.abstractstaticmethod    
        def cry():
            pass
    
    
    #使用抽象类必须使用abc模块
    import abc
    #书写抽象类必须指定抽象类的元类  固定格式
    class User(metaclass = abc.ABCMeta):#设置抽象类的元素
        #属性
        userid = 250
    
        def wind(self):
            print('东风吹,战鼓擂')
    
        #添加用户(非绑定类/对象方法)
        @abc.abstractmethod
        def adduser(self):
            pass
    
        #删除用户(类方法)
        @abc.abstractclassmethod
        def deluser(cls):
            pass
    
        #修改用户(静态方法)
        @abc.abstractstaticmethod
        def moduser():
            pass
    
        #查询用户(绑定类)
        @abc.abstractmethod
        def finduser():
            pass
    
    #继承抽象类,完成自己的工作内容
    class Chuser(User):
        # 添加用户(非绑定类/对象方法)
        def adduser(self):
            print('添加用户的操作')
    
    #继承Chuser类
    class Hhuser(Chuser):
        # 删除用户(类方法)
        @classmethod
        def deluser(cls):
            print('删除用户的操作')
    
    #继承Hhuser类
    class Lcuser(HHuser):
        # 修改用户(静态方法)
        @staticmethod
        def moduser():
            print('修改用户的方法')
    
    #继承Lcuser类
    class Ymuser(Lcuser):
        # 查询用户(绑定类)
        def finduser():
            print('查询用户的操作')
    
    #实例化对象
    e = Ymuser()
    e.adduser()
    Ymuser.moduser()
    Ymuser.deluser()
    Ymuser.finduser()
    e.wind()
    print(e.userid)
    
    
    





  • 相关阅读:
    多线程学习
    Redis学习2
    Redis学习1
    封装
    创建对象内存分析
    稀疏数组
    反转数组、冒泡排序
    可变参数
    .net core 3.x Web Api + Docker个人练手项目
    .net 性能优化手段
  • 原文地址:https://www.cnblogs.com/w-yumiao/p/8110713.html
Copyright © 2011-2022 走看看