"""
类似C语言中 struct 结构体,Python 中有对应的数据类型——空类
可直接通过类名调用
"""


class Employee:  # empty class
    pass


john = Employee()  # Create an empty employee record

# Fill the fields of the record
john.name = 'John Doe'
john.dept = 'computer lab'
john.salary = 1000


"""
静态方法与类方法
静态方法和类方法的创建:
将它们分别包装在 staticmethod 和 classmethod 类的对象中。

静态方法的定义中没有参数self,可直接通过类来调用。

类方法的定义中包含类似于self的参数,通常被命名为cls。对于类方法,也可通过对象直接调用,但参数cls将自动关联到类。

引入装饰器(装饰器可用于包装任何可调用的对象,并且可用于方法和函数),可指定一个或多个装饰器,
为此可在方法(或函数)前面使用运算符@列出这些装饰器,指定多个装饰器时,应用的顺序与列出的顺序相反(从后往前调用)。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
静态方法: 用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用。

普通方法: 默认有个self参数,且只能被实例化对象调用。

类方法: 默认有个 cls 参数,可以被类和实例化对象调用,需要加上 @classmethod 装饰器。
"""


class Classname:
    @staticmethod
    def fun():
        print('静态方法')

    @classmethod
    def a(cls):
        print('类方法')

    # 普通方法
    def b(self):
        print('普通方法')


Classname.fun()
Classname.a()

C = Classname()
C.fun()
C.a()
C.b()


class MyClass:
    """静态方法与类方法测试"""
    @staticmethod
    def smeth():
        print("This is a static method")

    @classmethod
    def cmeth(cls):
        print("This is a class method of", cls)


MyClass.smeth()
MyClass.cmeth()