'''
类(class):
用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。实例化:创建一个类的实例,类的具体对象。
1.对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。方法:类中定义的函数。
2.类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
3.实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用self修饰的变量
4.self:表示的就是对象的本身
5.类方法:
5.1:实例方法:有self参数的方法称为实例方法,实例方法是可以调用的,类名不能调用
5.2:类方法:通过装饰器生成@classmethod用于修饰类,可以被类和实例调用
5.3:静态方法(也属于装饰器)∶既不属于类,也不属于实例,不具有任何意义,提供实例或者实例化方法的使用. ..
'''
class People:
# 类的属性,也叫类变量
name = "张三"
sex = "男"
age = "18"
# 构造函数,也叫初始化函数。可以根据传进来的值,进行初始化类的属性
def __init__(self, name="张三", sex="男", age="18", id="1"):
self.name = name
self.sex = sex
self.age = age
self.id = id # 实例变量(这里相当于把直接定义了一个属性id)
# 类的方法、行为,也叫实例方法(实例方法:顾名思义就是只有实例才能调用的方法)。
def run(self):
print(self.id)
print(self.name, "学会了跑!")
# 调用 修饰类:类方法 和 修饰类:静态方法
# self.class_method()
# self.static_method()
@classmethod
# 修饰类:类方法,允许被类对象、和类名和类之中的其他方法调用直接调用。 但是不允许调用类中的实例方法
def class_method(cls):
# cls.run() #不允许直接调用类中的实例方法
# print(cls.name) #但是可以直接调用类的属性,cls相当于类名!!!!
# print(People("李四", "男", "19", "2").run()) #可以通过创建一个类对象调用
print("修饰类:类方法")
@staticmethod
# 修饰类:静态方法,允许被类对象、和类名和类之中的其他方法调用直接调用。 但是不允许调用类中的实例方法
def static_method():
print("修饰类:静态方法")
if __name__ == '__main__':
# 使用People,根据构造函数__init__进行初始化
People().run() # 李四 学会了跑!
print(People.name) # 类名调用类变量(类属性):张三
print(People("李四", "男", "19", "2").name) # 类对象调用类变量(类属性):李四
# 修饰类:类方法
People.class_method() # 类名调用
People("李四", "男", "19", "2").class_method() # 类对象调用
# 修饰类:静态方法
People.static_method() # 类名调用
People("李四", "男", "19", "2").static_method() # 类对象调用