• 知识点


    开始之前要知道Python类中两个概念:字段和方法

    “字段”和“方法”都有“动态”和“静态”之分,即:

      • 字段
        - 静态字段
        - 动态字段

      • 方法
        - 静态方法
        - 动态方法

    以下事例标明了:“静态字段”,“动态字段”以及“动态方法”是什么样子的,因为显而易见,就不用语言进行过多描述:

    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    """
    @author: caimengzhi
    @license: (C) Copyright 2013-2017.
    @contact: 610658552@qq.com
    @software: pycharm 2017.02
    @project: luffy
    @file: 1.py
    @time: 2018/3/3 18:04
    @desc:
    """
    
    
    # class A:
    #     def __test(self):
    #         print("A.test")
    #
    #     def func(self):
    #         print("A.func")
    #         self.__test()
    #
    #
    # class B(A):
    #     def __test(self):
    #         print("B.test")
    #
    #
    # b = B()
    # b.func()
    
    
    # class A:
    #     def __test(self):
    #         print("A.test")
    #
    #     def func(self):
    #         print("A.func")
    #         self.__test()
    #
    #
    # class B(A):
    #     def __test(self):
    #         print("B.test")
    #
    #
    # b = B()
    # b.func()
    
    # class C:
    #     def __test(self):
    #         print("c.test")
    
    #
    # class A:
    #     def func(self):
    #         print("A.func")
    #         self.__test()
    #
    #
    # class B(C,A):
    #     def __test(self):
    #         print("B.test")
    #
    # b = B()
    # b.func()
    # print(B.__mro__)
    # (<class '__main__.B'>, <class '__main__.A'>, <class '__main__.C'>, <class 'object'>)
    
    
    # coding:utf-8
    
    # coding:utf-8
    
    class People:
        # 下面是静态字段
        city = "南京"
    
        def __init__(self, name, age, sex):
            # 下面是动态字段
            self.name = name
            self.age = age
            self.sex = sex
    
        # 下面是动态方法
        def say_hello(self):
            print("%s say hello" % self.name)
            print(self)
    
        # 下面是静态方法
        @staticmethod
        def sleep():
            print("sleep")
    
        # 下面是类方法
        @classmethod
        def eat(cls):
            print("eat")
            print(cls)
            
    xiaoming = People("小明", 20, "")  
    xiaoming.sleep()                    # 结果是 sleep
    xiaoming.say_hello()                # 结果是 小明 say hello <__main__.People object at 0x0000000000E0DEB8>
    print(xiaoming.city)                # 结果是 南京
    
    People.sleep()                      # 结果是 sleep  
    People.say_hello(xiaoming)          # 结果是 小明 say hello <__main__.People object at 0x0000000000E0DEB8>
    print(People.city)                  # 结果是 南京
    People.eat()                        # 结果是eat  <class '__main__.People'>
    xiaoming.eat()
    # 结果是eat <class '__main__.People'>
    
    
    其实“静态方法”只需要执行两步操作,就可以转换成“静态方法”
    1. 在方法前加上:@staticmethod
    2. 把“动态方法”括号中的“self”去掉

    那么关于这四种类型,有什么特点?以下进行总结:

    1. 四种类型,均可以被“对象”进行调用,但不建议使用“对象”调用“静态方法”和“静态字段”,而建议使用“类”对其进行调用
    2. “动态方法”和“动态字段”只能由“对象”进行调用,而无法使用“类”进行调用(因为动态的方法和字段都要传入参数)
  • 相关阅读:
    图像处理之基础---卷积及其快速算法的C++实现
    嵌入式c语言笔试
    逻辑题
    多媒体开发之---h264 图像参数级语义
    多媒体开发之---h264 取流解码实现
    多媒体开发之---live555 分析客户端
    多媒体开发之---如何确定slice_header slice_type 的位置
    图像处理之基础---很好的一个开源文档库
    多媒体开发之---h264 高度和宽度获取
    Flutter实战视频-移动电商-65.会员中心_订单区域UI布局
  • 原文地址:https://www.cnblogs.com/caimengzhi/p/8507652.html
Copyright © 2020-2023  润新知