知识点

开始之前要知道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. “动态方法”和“动态字段”只能由“对象”进行调用,而无法使用“类”进行调用(因为动态的方法和字段都要传入参数)
原文地址:https://www.cnblogs.com/caimengzhi/p/8507652.html