第七章 面向对象(2):对象的使用

上一篇我们介绍了面向对象以及类,其中也有一些关于对象的概念。

简单的说,对象就是特征与技能的结合体。

7.3.1 __init__方法

__init__方法用来为对象指定对象自己独有的特性。(初始化方法)

class Student:
    school = 'aaa'  # 变量又称-类的数据属性

    def __init__(self, name, sex, age):  # 实例化的时候就会调用__init__方法
        self.Name = name  # 把参数传入实例化的对象 (python 大小写区分)
        self.Sex = sex  # 把参数传入实例化的对象
        self.Age = age  # 把参数传入实例化的对象

    def learn(self):  # 函数又称-类的函数属性
        print('learning')

    def eat(self):
        print('eating')

    def sleep(self):
        print('sleeping')

stu1 = Student('xiaoming', 'FM', 13)  # 因为__init__方法有位置参数,所以初始化的时候必须给定参数,如果不给参数会报错

# 加上__init__方法后,实例化的步骤
# 1. 先产生一个空对象
# 2. 调用 Student.__init__(stu1, 'xiaoming', 'FM', 13)
# 传入的参数在stu1的命名空间中

# 查属性
print(stu1.__dict__)  # 字典形式输出一下对象的属性

print(stu1.Name)
print(stu1.Sex)
print(stu1.Age)

# 改
stu1.Name = 'xiaowang'
print(stu1.__dict__)
print(stu1.Name)

# 增
del stu1.Name
print(stu1.__dict__)

# 删
stu1.class_name = 'python dev'
print(stu1.__dict__)

# 实例化stu2
stu2 = Student('xiaoyu', 'FM', 11)
print(stu2.__dict__)

7.3.2 属性查找与绑定方法

相似的特征与技能(类固有数据属性和函数属性)保存在类中

  • 类中的数据属性:是所有对象共有的
  • 类中的函数属性:是绑定给对象的,绑定到不同的对象是不同的绑定方法。方法只作用于执行它的对象
class Student:
    school = 'aaa'  # 变量又称-类的数据属性

    def __init__(self, name, sex, age):  # 实例化的时候就会调用__init__方法
        self.Name = name  # 把参数传入实例化的对象 (python 大小写区分)
        self.Sex = sex  # 把参数传入实例化的对象
        self.Age = age  # 把参数传入实例化的对象

    def learn(self):  # 函数又称-类的函数属性
        print('learning', self.Name)

    def eat(self):
        print('eating')

    def sleep(self):
        print('sleeping')

stu1 = Student('xiaoming', 'M', 13)
stu2 = Student('xiaowang', 'FM', 13)
stu3 = Student('xiaoliu', 'M', 11)

# 类中的数据属性:是所有对象共有的,保存在同一个内存地址中

print(Student.school, id(Student.school))  # 以下地址相同
print(stu1.school, id(stu1.school))
print(stu2.school, id(stu2.school))
print(stu3.school, id(stu3.school))

# 类中的函数属性:是绑定给对象的,绑定到不同的对象是不同的绑定方法。方法只作用于执行它的对象
print(Student.learn, id(Student.learn))  # 是function类型,一般函数
Student.learn(stu1)  # 可以传入对象来执行,不传会报错
Student.learn(stu2)  # 可以传入对象来执行
Student.learn(stu3)  # 可以传入对象来执行

# 对象调用绑定方法时,会将对象本身当做第一个参数传入,传给self
print(stu1.learn, id(Student.learn))  # 内存地址不同,是bound method类型:绑定方法
print(stu2.learn, id(Student.learn))  # 内存地址不同,是bound method类型:绑定方法
print(stu3.learn, id(Student.learn))  # 内存地址不同,是bound method类型:绑定方法
# 输出例:<bound method Student.learn of <__main__.Student object at 0x000000000228D5F8>> 36087736

stu1.learn()  # 相当于learn(stu1)
stu2.learn()  # 相当于learn(stu2)
stu3.learn()  # 相当于learn(stu3)
# stu3.learn(stu3)  如果再传入,会报错,说你传入了2个参数

# 当对象和类有同一个变量的时候,跟函数类似,先访问对象中>类中>父类,当父类中都没有,就会报错,不会去全局变量找。
stu1.x = 'xxx'
Student.x = 'XXXXXX'

print(stu1.x)
print(stu1.__dict__)

del stu1.x
print(stu1.x)
print(stu1.__dict__)

类中定义的函数实际上是给对象使用的,绑定对象使用

补充 python中一切皆对象

python中一切皆对象,并在在python3中统一了类与类型的概念。即数据类型也是一种类

print(type([1,2,3]))  # 结果:<class 'list'> ,即是说 list其实是一个类
li = [1,2,3]  # li = list([1,2,3])
li.append(2)  # 这个append也是li的绑定方法
list.append(li, 2)  # 这个其实就相当于,执行了类list的append的方法
  • 小注意:
  1. 站在不同的角度定义出的类是不同的。
  2. 现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中优势需要拆分成部门类,业务类等
  3. 有事为了编程需求,程序中也可能定义现实中不存在的类,比如策略类,现实中并不存在,但在程序中确实很常见的类

面向对象的好处

可扩展性高,在以后的知识点里,继承,封装等都会介绍

原文地址:https://www.cnblogs.com/py-xiaoqiang/p/11210404.html

时间: 2024-11-10 00:43:56

第七章 面向对象(2):对象的使用的相关文章

《软件工程 ——理论、方法与实践》知识概括第七章 面向对象分析

第7章 面向对象分析    面向对象的分析模型:功能模型.分析对象模型.动态模型. 一.分析的概念 分析类可以划分为实体类.边界类和控制类. 在UML语言中,使用构造型<<entity>>.<<boundary>>和<<control>>分别表示实体类.边界类.控制类. 分析活动:理解用例模型.识别分析类(识别实体类.识别边界类.识别控制类).定义交互行为.建立分析类图(定义属性.定义行为.定义关系).评审分析模型.分析过程是一个循环

Java 第七章 类和对象 笔记

一.对象的特征--类的属性 每个对象的每个属性都有特定的值 对象的操作--类的方法 二.封装:对象同时具有属性和方法两项特性.     对象的属性和方法通常被封装在一起,共同体现事物的特性,     二者相辅相成,不能分割. 三.类和对象的区别:     类:抽象的概念,是一个模子,确定了对象的属性和方法.    对象:能够看得见摸得着的实物.具有静态和动态特征. 四.定义类的步骤:     1.定义类名      2.定义类的属性 访问修饰符 属性类型 属性名称=默认值:     3.定义类的

软件工程概论第七章--面向对象分析

本章主要讲了面向对象分析,从分析的概念.识别分析类.定义交互行为.建立分析类图和评审分析模式几个方面展开讲述.面向对象分析模型由三个独立模型,功能模型.分析对象模型.动态模型. 分析的概念中主要讲了分析类与分析活动,分析类用于描述系统中较高层次的对象,从软件功能需求来看能划分为实体类.边界类和控制类.分析活动把需求获取阶段产生的用例和场景转换成分析模型. 识别分析类讲了识别边界类.识别控制类.识别实体类三个方面,识别边界类,通常一个参与者与一个用例之间的交互或通信关联对应一个边界类.识别控制类,

第七章 面向对象(一)

7 面向对象 7.1 类和对象 类:现实世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起. 对象:类的具体实例 7.2 成员变量和局部变量     7.2.1 作用范围 成员变量作用于整个类中. 局部变量作用于方法或语句中.     7.2.2 内存中的位置 成员变量在堆内存中 局部变量在栈内存中 7.3 匿名对象 创建对象时不起名字:new Car(): 匿名对象是对象的简化形式 7.3.1 使用情况 1.对对象的方法只进行一次调用 2.作为实际参数进行传递 7.4 构造函

第七章 类和对象

1. java是一种面向对象的编程语言(Object Oriented Pragramming Languge,OOP). 2. OPP具有的优点是: 使人们的编程与实际的世界更加接近,所有的对象被赋予属性和方法,这样编程就更加人性化:它的宗旨在于模拟现实世界中的概念 3. OPP主要有抽象.封装.继承.多态四大特征 4. 对象: 1)用来描述客观事物的一个实体,由一组属性和方法构成 2)对象的属性和方法通常被封装在一起,共同体现事物的特征,二者相辅相成,不可分割 对象的特征--类的属性 对象的

第七章 面向对象(3):继承与派生

7.4 继承:减少类之间的冗余 什么是继承? + 继承指的是类与类之间的关系,是一种什么"是"什么的关系 继承的作用: 解决代码重用问题 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类称为派生类或子类. 对象的属性查找: 对象中找>类中找>父类找>父类的父类...>最上级父类>报错 类继承例: class Parentclass1: pass class Parentclass2: pass

第七章-面向对象高级编程

1 使用__slots__ 1.1 绑定属性和方法 给实例绑定属性 class Student(object): pass >>> s = Student() >>> s.name = 'Michael' # 动态给实例绑定一个属性 >>> print(s.name) Michael 给某个实例绑定方法 >>> def set_age(self, age): # 定义一个函数作为实例方法 ... self.age = age ...

《软件工程概论》第七章 面向对象分析

分析类: 实体类:用于描述必须存储的信息及其相关行为. 边界类:用于描述外部参与者与系统之间的交互. 控制类:用于描述一个用例所具有的事件流控制行为. 分析活动: 需求分析的重点在于理解系统本身,它将需求获取阶段产生的用例和场景转换成分析模型. 识别分析类: 识别边界类 识别控制类 识别实体类 定义交互行为:顺序图 建立分析类图: 定义关系和属性 应用分析模式 评审分析模型

软件工程—第七章

第七章—面向对象分析 分析类是概念层次上的内容,用于描述系统中较高层次的对象,分析类可分为实体类.边界类.控制类.实体类用于描述必须存储的信息及其相关行为(需要长久的保存),两种表示方法:1.构造型<<entity>>的类形式2.图表形式.边界类用于描述外部参与者与系统之间的交互.控制类用于描述一个用例所具有的事件流控制行为. 那么怎么识别这些分析类呢?通常一个参与者与一个用例之间的交互或通信关联对应一个边界类.控制类与用例存在着密切的关系,在用例开始执行时创建,在用例结束时取消.