"""
面向过程:
将程序流程化
面向对象:
对象就是容器,用来存放数据与功能
类:
用来产生对象的模型,类就是数据类型
类名:推荐驼峰命名法
类在定义阶段就产生了名称空间
"""
class Student:
school = '方舟教育'
# 该代码在运行时会执行
print('from Student')
def func01(self):
print('from stu_func01')
return self
print(Student.__dict__)
# 类的属性,底层为一个字典
# {
# '__module__': '__main__', 'school': '方舟教育',
# 'func01': <function Student.func01 at 0x103481430>,
# ...
# }
print(Student.school, Student.__dict__['school'])
class Student:
stu_school = 'beautiful'
# 自动触发该函数
# 自动传入self
def __init__(self, x):
self.stu_name = x
# 该方法必须返回None 默认即可
# 自动将对象传入函数
# 如果函数并不操作对象,则不需要把函数定义在类内部
def stu_func01(self):
print('from stu_func01')
return self
# 底层传入一个空对象,返回一个有数据的对象
stu_obj_01 = Student('黎明')
rse_01 = stu_obj_01.__dict__
# {'stu_name': '黎明'}
class School:
school_name = '艺术学院'
# 独有数据 创建对象时自动调用
def __init__(self, address):
self.address = address
# 创建班级空列表
self.classes = []
# 共享方法:关联班级 设置班级名
def related_class(self, class_obj):
# 将班级名加入列表
self.classes.append(class_obj.name)
class Class:
def __init__(self, name):
self.name = name
class_01 = Class('2103')
class_02 = Class('2104')
student = School('净月区')
# 关联学校与班级对象
student.related_class(class_01)
student.related_class(class_02)
# 获取班级的属性
print(student.classes)
"""
绑定方法:将调用者本身当做第一个参数传入
绑定给对象的方法:调用者为对象,自动传入一个对象 默认
绑定给类的方法:调用者为类,自动传入一个类 @classmethod
非绑定方法[静态方法]:既不指定给类又不指定给对象 @staticmethod
"""
class Mysql:
def __init__(self, name):
self.name = name
# 绑定给类的方法
@classmethod
# 创建对象 传入类
def mk_obj(cls):
print(cls)
# <class '__main__.Mysql'>
print('对象被创建了')
# 主要用于初始化对象
return cls('初始名')
obj = Mysql('gg')
print(obj.name)
obj = obj.mk_obj()
print(obj.name)
class People:
@staticmethod
def say():
print('非绑定函数')
# 调用者可以是类或对象
# 不会自动传参
People.say()
people = People()
people.say()