面向对象

发布时间 2023-06-25 16:05:53作者: Maverick-Lucky

面向对象

面向过程

面向过程:就是机械的思维方式,先干什么,在干什么,最后干什么,其核心就是过程

代码案例,实现面向过程的例子:

  1.接受用户名和密码

  2.做逻辑处理,验证参数

  3.将数据写入文件中

优点:把复杂的问题简单化,进而流程化

缺点:扩展性差

使用场景: 对扩展性要求不高的地方,一般使用面向过程

面向对象

面向对象的核心就是‘对象’。

对象:特征与功能的结合体

优点:扩展性强

缺点:编程复杂度变高了

使用场景:一般用在对扩展性要求较高的地方

类的定义和对象的产生

类:就是一系列相似的特征和相似的技能的结合体

在程序中:

  必须先定义类,在调用类产生对象

# 给学生类定义一个属性和方法
class student():
    school = 'SH' #  school 就是一个属性,属性就是变量
    counntry = 'China'
    # 在类里面定义的函数叫方法
    def choose_course(stu_dict,course):
    stu_dict["courses"].append(course)
    print("%s选择了%s成功,%s" % (stu_dict["name"], course, stu_dict["courses"]))
     def func(self):
        pass
    # print("helloworld")
    # print("helloworl1111d")

"函数如果不调用,不会调用函数体代码。"

定义类发生的事情:

  1. 类一旦被定义,会立马执行类体代码

  2.类一旦定义完成,会产生类的名称空间,会将类中的名字放在类的名称空间去

  3.会把类的名称空间绑定给__dict__属性。

如何查看类的名称空间:类名.__dict__

  eg: print(Student.__dict__)

如何产生对象:在程序中,必须先定义类,然后调用类产生对象

如何调用类:类名() 

  eg: stu = Student()   # 得到的结果stu为一个对象

如何查看对象的名称空间: 对象名.__dict__

  eg:print(stu.__dict__)   # 调用类产生对象,得到的是一个空对象,其实就是空字典

“““ 每调用一次类,都会产生一个对象,并且产生的对象之间是相互独立,互不影响的”””

调用类的过程也是实例化的过程,得到的结果就是一个实例

定制对象自己独有的属性

class Student():
    # school就是一个属性
    school = 'SH'  # 属性就是变量

    # __init__这个函数名不能改名字,必须叫这个名字,一点都不能差
    def __init__(stu_obj, name, age, gender, salary):
        stu_obj.name = name  # stu.__dict__['name'] = 'kevin'
        stu_obj.age = age  # stu.__dict__['age'] = '18'
        stu_obj.gender = gender  # stu.__dict__['gender'] = 'male'
        stu_obj.salary = salary  # stu.__dict__['salary'] = '1800'

怎么得到一个对象

  调用类会自动的触发类里面的__init__方法,然后会把得到的对象本身当成第一个参数自动传递

"""__dict__开头的属性或者方法都有他自己的特殊含义,一般不建议使用"""

名字的查找顺序(重点)

属性的查找顺序分两大类:

类属性:在类里面定义的属性就是类属性 

  查看:print(Student.school)

  增加:Student.x = 'a'   

       Student.y = 'b'

  改:Student.x = 10

  删除; del Student .school

       print(Student.dict__)

对象属性:就是对象自己独有的属性

print(stu.__dict__)

  查看: print(stu.__dict__['name'])

      print(stu.__dict__['age'])

     print(stu.__dict__['gender'])

或者:

  print(stu.name)
  print(stu.age)
  print(stu.gender)
  stu.school = 10
  print(stu.__dict__)

"""这是个特殊的:对象属性的查找顺序是:先在自己对象的名称空间中查找,如果找不到再去产生这个对象的类中取找,如果找不到,就报错"""

 增加:stu.x = 1

改:stu.x = 10
删除:del stu.school

print(stu.__dict__)