【学记笔记】Python类的初始方法、静态方法、类方法、普通方法、抽象方法、继承方法代码对比

#!/usr/bin/env/python3
# -*- coding:utf-8 -*-


class Mycls():
    # 初始化方法
    def __init__(self, name="alice"):
        self.name = name

    # 静态方法
    @staticmethod
    def my_staticmethod():
        print("""【静态方法】独立方法,和类外部方法一致,不能调用类实例self、不能调用类本身cls、不能调用类属性self.name,参数不能带有self、cls""")
        print("""【调用方式】
        Mycls.my_staticmethod()
        Mycls().my_staticmethod()
        """)

    # 类方法
    @classmethod
    def my_classmethod(cls):
        print("""【类的方法】类的专属方法,cls为默认值可以修改""")
        print("""【调用方式】
        Mycls.my_classmethod()    -- 推荐用类名调用
        Mycls().my_classmethod()  -- 不推荐用类实例化后,去调用类方法
        """)

    # 普通方法
    def my_generalmethod(self):
        print("""【类的方法】类的内部方法,self为默认值可以修改""")
        print("""【调用方式】
        Mycls().my_generalmethod()
        """)


from abc import ABC, abstractmethod


class Myinterface(ABC):  # 抽象接口父类必须继承抽象类ABC,子类继承抽象接口父类,必须重写父类的方法

    # 抽象接口父类的公共方法(语法糖方式)
    @abstractmethod
    def common_api1(self):
        print("""【抽象方法】抽象父类的接口方法,self为默认值可以修改,抽象子类必须继承父类所有的抽象方法""")
        print("""【调用方式】
        不能直接实例化,不能直接被调用
        test=Myabc() -- 报错:TypeError: Can't instantiate abstract class Myabc with abstract methods common_api1
        """)
        print("""【源码参考】点击@abstractmethod,跳转源码,其实核心就是将当前抽象类的抽象方法属性改为True
        比如:funcobj.__isabstractmethod__ = True,等价于,common_api1.__isabstractmethod__=True""")
        pass

    # 抽象接口父类的公共方法(源码赋值为True方式)
    def common_api2(self):
        print("""【抽象方法】抽象父类的接口方法,self为默认值可以修改,抽象子类必须继承父类所有的抽象方法""")
        print("""【调用方式】
        不能直接实例化,不能直接被调用
        test=Myabc() -- 报错:TypeError: Can't instantiate abstract class Myabc with abstract methods common_api2
        """)
        print("""【源码参考】点击@abstractmethod,跳转源码,其实核心就是将当前抽象类的抽象方法属性改为True
        比如:funcobj.__isabstractmethod__ = True,等价于,common_api2.__isabstractmethod__=True""")

    common_api1.__isabstractmethod__ = True


class A_interface(Myinterface):
    def common_api1(self):
        print("""【重写方法】抽象子类的接口方法,self为默认值可以修改,抽象子类必须继承父类所有的抽象方法""")
        print("""【调用方式】
        test = A_interface()
        test.common_api1()
        """)

    def common_api2(self):
        print("""【重写方法】抽象子类的接口方法,self为默认值可以修改,抽象子类必须继承父类所有的抽象方法""")
        print("""【调用方式】
        test = A_interface()
        test.common_api2()
        """)


if __name__ == '__main__':
    test = A_interface()
    test.common_api1()
    test.common_api2()

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值