首页 > 编程语言 >类和面向对象编程

类和面向对象编程

时间:2023-06-25 15:14:06浏览次数:43  
标签:__ name self stu Student 面向对象编程 属性

一、两大范式

支持面向对象的语言中,都有两大范式面向过程和面向对象

1、面向过程:流程化、步骤化思维

优点:

复杂的问题简单化,进而流程化

缺点:

扩展性差,牵一发而动全身
使用场景:对扩展性要求不高的地方,一般使用面向过程

2、面向对象

对象就是盛放数据"属性"和"方法"的结合体
属性:简单理解就是变量
方法:简单理解就是函数,或者叫功能

优点:扩展性强
缺点:编程复杂度变高了
使用场景:一般用在对扩展性要求较高的地方

二、类的定义和对象的产生

1、类:就是一系列相同属性和相同方法的结合体

2、必须先定义类,然后调用类产生对象

3、定义类发生的几件事情?

  • 类一旦被定义,会立马执行类体代码
  • 类一旦定义完成,会产生类的名称空间,它会把类中的名字都丢到类的名称空间去
  • 会把类的名称空间绑定给__dict__属性, 查看类的名称空间: 类名.__dict__

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

三、定制对象自己独有的属性

调用类产生对象,stu = Student('zjz', 18, 'male', 9000), Student为类,stu为具体的实例对象。

其中的初始化方法__init__就是为了构造实例对象而存在

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

    # __init__这个函数名不能改名字,必须叫这个名字,一点都不能差
    def __init__(self, name, age, gender, salary):
        self.name = name
        self.age = age
        self.gender = gender
        self.salary = salary

    # 在类里面定义一个方法出来,为什么叫方法了?本质上就是函数,写在类里面就叫方法
    def choose_course(self, course, ):
        self["courses"].append(course)
        print("%s选择了%s成功,%s" % (self["name"], course, self["courses"]))

stu = Student('zjz', 18, 'male', 9000)
print(stu.name)  # zjz
print(stu.age)  # 18
print(stu.__dict__)  #  {'name': 'zjz', 'age': 18, 'gender': 'male', 'salary': 9000}

注⚠️:

1、__init__方法和self:初始化方法,为了构造实例而存在

__init__是一个特殊的方法,用于在创建类的实例时进行初始化操作。它是类的构造函数,会在对象被创建时自动调用。

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

例如:

class MyClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age

# 创建对象并传递参数
obj = MyClass("Alice", 25)

# 访问对象的属性
print(obj.name)  # 输出: Alice
print(obj.age)  # 输出: 25

在上面的例子中,MyClass类定义了一个__init__方法,该方法接受两个参数nameage。在方法内部,我们使用self.nameself.age来将参数值赋给对象的属性。

当我们创建MyClass的实例obj时,会自动调用__init__方法,并将实例对象obj作为self参数传递给该方法。这样,obj.nameobj.age被赋予了初始值。

__init__方法在对象创建时执行一次,用于初始化对象的状态。你可以在该方法中执行任何必要的操作,例如设置属性的初始值、打开文件、建立数据库连接等。

需要注意的是,__init__方法不返回任何值,它仅用于对象的初始化。如果你想为类定义其他的实例方法,可以在类中定义其他的普通方法,这些方法可以使用self参数来访问对象的属性和方法。

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

print(stu.__dict__) 

四、名字的查找顺序(重点)

1、 属性的查找顺序分两大类:
类属性:在类里面定义的属性就是类属性
对象属性:就是对象自己独有的属性

对象属性的查找顺序是:

先在自己对象的名称空间中查找,如果找不到再去产生这个对象的类中去找,如果找不到,就报错。实例对象不能删除类中的属性和方法

2、实例对象的增删改查

# 增加属性
stu.work = 'no job , is student'

# 查
# print(stu.work)

# 改属性
stu.work = 'ops'
# print(stu.work)

#  删除
del stu.work
del stu.school
print(stu.school)  # AttributeError: school,实例对象不能删除类中的属性

3、类的增删改查

# 增加属性
Student.work = 'no job , is student'
print(Student.work)

# 改属性
Student.work = 'ops'
print(Student.work)

#  删除
del Student.work
print(Student.work)

五、练习题

定义一个类,产生一堆对象
定义一个计数器,记录产生了多少个对象

# 定义一个类
class Student:
    school = 'sh'
    count = 0

    # 初始化方法
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
        Student.count += 1  # 关键,属性定成类中的count,每初始化一次count+1

# 调用类产生一堆对象
stu = Student("kevin", 18, 'male')
stu1 = Student("kevin1", 18, 'male')
stu2 = Student("kevin2", 18, 'male')
stu3 = Student("kevin3", 18, 'male')
print(stu.__dict__)

# 计数器,记录产生多少个对象
print(Student.count)

 

标签:__,name,self,stu,Student,面向对象编程,属性
From: https://www.cnblogs.com/dgp-zjz/p/17502935.html

相关文章

  • python入门(十):面向对象编程
    Python面向对象编程指南原文|大纲|首页在Python中,面向对象编程(Object-OrientedProgramming,简称OOP)是一种重要的编程范式。它允许我们通过创建对象、定义类和实现继承等概念来组织和管理代码。了解Python的面向对象编程对于编写可维护、可扩展和可重用的代码至关重要。......
  • [连载]JavaScript讲义(03)--- JavaScript面向对象编程
    ......
  • Python开发系列课程(9) - 面向对象编程基础
    面向对象编程基础活在当下的程序员应该都听过“面向对象编程”一词,也经常有人问能不能用一句话解释下什么是“面向对象编程”,我们先来看看比较正式的说法。把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继......
  • python3 面向对象编程--类的封装和继承
    #python3importrefromurllibimportrequestimportosclassPosterSpider(object):def__init__(self,path='./'):self.path=path#theentryofthisprocessdefgetStart(self,url):page=self.reqPage(url)......
  • Java面向对象编程的三大特性:封装、继承、多态。
    一、封装封装的核心在于私有化(private),大部分情况下,来封装对象的属性,很少有封装方法的。通过将对象的属性封装,提供对外的公共方法来访问属性是最常见的方式。publicstaticclassFengZhuang{//通过封装,设置私有属性privateStringname;privat......
  • 面向对象编程-实例属性和类属性
    在实例中绑定属性,和直接在类种绑定属性是不一样的,实例中绑定的只能在实例中用如果Student类本身需要绑定一个属性,所有实例都可以访问,那么可以这么定义classStudent(object):name='Student'点击查看代码classStudent(object):score=100#定义类属性def__in......
  • 面向对象编程-获取对象信息
    获取对象类型使用type()type(123)<class'int'>type('str')<class'str'>type(None)<type(None)'NoneType'>type(abs)<class'builtin_function_or_method'>type(a)<class'......
  • 面向对象编程-类和实例
    定义类通过class关键字,类名通常是大写开头的单词,(object)表示这个类从哪个类继承下来,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类点击查看代码classStudent(object):pass创建好类,就可以根据Student类创建出Student的实例,创建实例是通过类名+()实现......
  • 实验7 面向对象编程与内置模块
    实验任务1task1.py1classAccount:23def__init__(self,name,account_number,initial_amount=10):4self._name=name5self._card_no=account_number6self._balance=initial_amount7defdeposit(self,amount):......
  • 实验7 面向对象编程与内置模块
    task1源代码'''银行账户数据:持卡人姓名、账号、当前余额操作:取款、存款、打印账户信息、返回账户余额'''classAccount:'''一个模拟银行账户的简单类'''def__init__(self,name,account_number,initial_amount=10):''......