面向对像
1、面向过程编程
核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么
基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式
优点:复杂的问题流程化、进而简单化
缺点:可扩展性差
James = ['student of nick','160','180']
Python中一切皆对象
对象的概念: 就是特征和技能的结合体
面向*对象*编程: 定义出一个个鲜明独特的对象,然后通过对象之间的交互编程
优点: 扩展性非常强
缺点: 逻辑非常复杂
语法
# 类的声明:
'''
class 类名: # class定义类语法的关键字
pass
'''
# 对象的产生: 对象的实例化
'''
对象1 = 类名()
对象2 = 类名()
对象3 = 类名()
'''
# 类与对象都有自己独立的名称空间,每一个被实例化出来的对象,名称空间也是各自独立
# 所以类与对象都能额外添加 属性(变量) 和 方法(函数)
# 重点:类一旦被加载(随着所属文件的加载就加载),就会进入类的内部执行类中的所有代码
类与对象
类:具有相同特征与行为事物集合体的抽象
对象:现实中,实际存在的各个事物,也就是抽象出的类的具体表现
定义类
class Student:
pass
产生对象
stu = Student()
添加特征与行为
stu.name = 'James' stu.get_age = lambda age: age
造类
# 造类
def f1(): # 函数定义阶段,只检测语法,不执行代码(牢记)
# 1/0
school = 'oldboy'
addr = 'shanghai'
class OldBoyStudent: # 类的定义阶段,会运行代码(牢记)
# 1 / 0
school = 'oldboy'
addr = 'shanghai'
def choose_course(self):
# 1 / 0
print('is choosing course')
oldboystudent_dict = OldBoyStudent.__dict__ # 双下划线开头的方法会在某种情况下自动触发
print(oldboystudent_dict['school'])
oldboystudent_dict['choose_course'](1111)
造对象(实例化对象)
stu1 = OldBoyStudent() print(1, stu1.school) 1,stu1.choose_course() stu2 = OldBoyStudent() print(2,stu2.school) stu3 = OldBoyStudent() print(3,stu3.school)
- 定制对象独有的特征
print(
OldBoyStudent.__dict__) # {'__module__': '__main__', 'school': 'oldboy', 'addr': 'shanghai', 'choose_course': <function OldBoyStudent.choose_course at 0x00000288C04389D8>, '__dict__': <attribute '__dict__' of 'OldBoyStudent' objects>, '__weakref__': <attribute '__weakref__' of 'OldBoyStudent' objects>, '__doc__': None}
print('stu1', stu1.__dict__) # stu1 {}
stu1.__dict__['id'] = 222222
stu1.id = 222222
print(stu1.__dict__)
print(stu1.id)
print(OldBoyStudent.__dict__)
print('stu2', stu2.__dict__) # stu2 {}
stu2.__dict__['id'] = 666666
stu2.id = 666666
print(stu2.id)
class People:
# 类自带(不同在外界额外添加)的属性与方法
identify = '人类'
def sleep(self):
print('睡觉')
p1 = People()
p2 = People()
p1.identify = '新人类'
print(p1.identify) # 访问自己的
p1.__dict__.clear() # 删除自己的后
print(p1.identify) # 访问类的
print(p2.identify) # p2没有自己的,访问类的
# 重点:属性的访问顺序:优先加载自身的名字,如果没有再考虑类的
数据类型
int/float/str/list/tuple/dict/set/func/class
class Foo:
pass
f1 = Foo()
print(type(f1))
lis = [1,2,3,4] # lis = list([1,2,3,4])
print(type(lis))
lis.append(5)
s = str('str')