面向对象

面向对像

 

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')

 

posted @ 2019-06-18 20:47  legend27  阅读(81)  评论(0编辑  收藏  举报