面向过程、面向对象、类的定义和对象的产生、定制对象自己独有的属性、名字的查找顺序(重点)

面向对象

面向过程

面向过程:其核心就是过程,过程就是流水线,分步骤解决问题,将程序流程化。

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

  1.接受用户名和密码

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

  3.将数据写入文件中

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

缺点:扩展性差

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

面向对象

面向对象的核心就是‘对象’,在python中,一切皆对象!

对象:用来盛放数据属性和方法的结合体

优点:扩展性强

缺点:编程复杂度变高了

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

类的定义和对象的产生

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

在程序中:

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

# 定义类的语法格式:
"""
    class 类名():
        pass
    类名:遵循变量的命名规范,一般情况首字母大写,如果类名很长,推荐使用大驼峰命名
"""
class Student():
    school = 'SH'
    country = 'CHina'
    
    def choose_course(self):
        pass
# 给学生类定义一个属性和方法
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(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

 

posted @ 2023-06-25 15:57  Maverick-Lucky  阅读(55)  评论(0)    收藏  举报