11-类以及实例对象

类和对象相关解释及实例 类、成员变量、成员方法、以及对象用法 阅读详情

两大编程思想

两大编程思想:面向过程、面向对象
用西红柿炒鸡蛋举个例子:
面向过程:事物比较简单,可以用线性思维去解决。【1、打鸡蛋;2、切西红柿;3、点火;4、倒油;5、下鸡蛋;6、下西红柿;7、翻炒3分钟;8、出锅。】
面向对象:事物比较复杂,使用简单的线性无法解决。【找一个餐馆,点一份西红柿炒鸡蛋】
共同点:解决实际问题的一种思维方式。
二者相辅相成,并不是对立的。

解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间的关系,方便我们分析整个系统具体到微观操作,仍然使用面向过程的方式来处理。

类与对象

类:类别,分门别类,多个类似事物组成的群体的统称,能够帮我们快速理解和判断事物的性质。
对象:100、99、500都是int类下包含的相似的不同个例、实例或者对象。

python中一切皆对象

类的创建

类的创建格式

class 类名:
pass
注意:类名建议以下列格式为准,每个单词的首字母大写,其他小写,比如:StudentInfo

类的组成

类的组成有:类属性、实例方法、静态方法、类方法、初始化方法、实例属性。
类属性—直接写在类中的变量。
实例方法—def est(self): pass
静态方法— @staticmethod def method(): pass
类方法—@classmethod def cml(cls): pass
初始化方法-- def init(self): pass
实例属性—就是定义在__init__方法中的变量;

class Student(object):
    # 类属性
    studentType = '学生'

    #初始化方法
    def __init__(self, name, age):
        #name age是实例属性
        self.name = name
        self.age = age
    
    @staticmethod
    def staticMethodInfo():
        print('我是静态方法')
    
    @classmethod
    def classMethodInfo(cls):
        print('我是类方法')
    
    def est(self):
        print("我是实例方法")

对象的创建

对象的创建,即类的实例化
格式:实例名 = 类名()

调用类中的属性【类属性、实例属性】以及方法【静态方法、实例方法、类方法】
格式:实例名.属性/方法

类属性:类中方法外的变量,被该类的所有对象所共享。
类方法:使用classmethod修饰的方法,使用类名直接调用。
静态方法:使用staticmethod修饰的方法,使用类名直接调用。

例子如下:

class Student(object):
    # 类属性
    studentType = '学生'

    #初始化方法
    def __init__(self, name, age):
        print('我是初始化方法')
        #name age是实例属性
        self.name = name
        self.age = age
    
    @staticmethod
    def staticMethodInfo():
        print('我是静态方法')
    
    @classmethod
    def classMethodInfo(cls):
        print('我是类方法')
    
    def eat(self):
        print("我是实例方法")

# 创建实例时会调用初始化方法
stu = Student('张三',23) # 我是初始化方法

#调用静态方法
Student.staticMethodInfo() # 我是静态方法
stu.staticMethodInfo() # 我是静态方法

#调用类方法
Student.classMethodInfo() # 我是类方法
stu.classMethodInfo() # 我是类方法

#调用实例方法
# Student.eat() #报错,TypeError: eat() missing 1 required positional argument: 'self'
stu.eat() # 我是实例方法

#访问类属性
print(Student.studentType) # 学生
print(stu.studentType) # 学生

#访问实例属性
# print(Student.name) #报错,AttributeError: type object 'Student' has no attribute 'name'
print(stu.name) # 张三

动态绑定属性和方法

Python是动态语言,在创建对象之后,可以动态地绑定属性和方法。

class Student(object):

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

stu = Student('张三',20)
stu.gender = '女'
print(stu.gender) # 女

def show():
    print('show方法')
stu.show = show

stu.show() # show方法

封装

封装:提高程序安全性。
将数据和行为包装到到类对象中,在方法内部对属性进行操作,在类的外部调用方法,这样,无需关心方法内部的具体实现细节,从而隔离了复杂性。
属性私有:__name = ‘xxxx’

继承

继承:提高代码的复用性。
格式:
class 子类名(父类1,父类2):
pass
如果一个类没有继承任何类,则默认继承object类。
python支持多继承。
定义子类时,必须在其构造函数中调用父类的构造方法:super().init()

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

class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.grade = grade

per = Person('大明',56)
print(per.age) # 56
print(per.name) # 大明
stu = Student('小明',23,100)
print(stu.name) # 小明
print(stu.age) # 23
print(stu.grade) # 100

方法重写

如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其进行重新编写。子类重写后的方法中可以通过super().xx()调用父类中被重写的方法。

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def printInfo(self):
        print('我叫'+str(self.name)+',今年'+str(self.age)+'岁了')
        

class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.grade = grade
    
    #方法重写
    def printInfo(self):
        super().printInfo()
        print('我还是个学生,'+str(self.grade))

per = Person('大明',56)
stu = Student('小明',23,100)
per.printInfo()
stu.printInfo()

object类

object类是所有类的父类,因此所有类都有object类的属性和方法。
内置函数dir()可以查看指定对象所有属性。
object有一个__str__()方法用于返回一个对于’对象的描述’,对应内置函数str(),经常用于print()方帮我们查看对象的信息,所有我们经常会对__str__()进行重写。

print(dir(object))
print(object)
print(str(object))

# ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
# <class 'object'>
# <class 'object'>

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def printInfo(self):
        print('我叫'+str(self.name)+',今年'+str(self.age)+'岁了')

per = Person('大明',56)
print(dir(Person))
print(Person)
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'printInfo']
# <class '__main__.Person'>

print(per) # <__main__.Person object at 0x000001A3ACDC8358>
print(dir(per)) #实例对象比类中多了实例属性
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'name', 'printInfo']

class Person1:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def printInfo(self):
        print('我叫'+str(self.name)+',今年'+str(self.age)+'岁了')
    
    #重写str方法
    def __str__(self):
        super().__str__()
        print('打印Person类的信息')
        return 'Person1'
print(Person1('11',34))
# 打印Person类的信息
# Person1

多态

多态具有多种形态,即使不知道一个变量所引用的对象到底是什么类型,任然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法。

class Person:
    def eat(self):
        print('Person eat')

class Animal:
    def eat(self):
        print("Animal eat")

class Dog(Animal):
    def eat(self):
        print("Dog eat")
class Cat(Animal):
    def eat(self):
        print("Cat eat")

def fun(classObject):
    classObject.eat()

p = Person()
fun(p) # Person eat

a = Animal()
fun(a) # Animal eat
d = Dog()
fun(d) # Dog eat
c = Cat()
fun(c) # Cat eat

注意:静态语言和动态语言关于动态的区别:
静态语言实现多态的三个必要条件:继承、方法重写、父类引用指向子类对象。
动态语言的多态崇尚"鸭子类型",在鸭子类型中不需要关心对象是什么类型,到底是不是鸭子,只关心对象的行为。

特殊方法和特殊属性

特殊属性

 -------A -----      B
|                 |       |
D               C  = C
				实例x
  1. dict—获取类对象和实例对象所绑定的所有属性和方法
  2. x.class–输出实例对象所属的类
  3. C.bases:输出C类父类(A|B)
  4. C.base----输出C类第一个父类(A)
  5. C.mro-----类的层次关系;
  6. A.subclasses()----A类的子类列表(D,C)
class A:
    pass

class B:
    pass

class D(A):
    pass

class C(A,B):
    pass

c = C()
print(A.__dict__)
#{'__module__': '__main__', '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}
# <class '__main__.C'>
print(c.__class__) # <class '__main__.C'>
print(C.__bases__) #(<class '__main__.A'>, <class '__main__.B'>)
print(C.__base__) # <class '__main__.A'>
print(C.__mro__) # (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
print(A.__subclasses__()) # [<class '__main__.D'>, <class '__main__.C'>]

特殊方法

  • len()–通过重写__len__()方法让内置函数len()的参数可以是自定义类型。
  • add()–通过重写__add__()方法,可以使用自定义对象具有+的功能。
  • new()—用于创建对象。
  • init()----对创建的对象进行初始化。

类的浅拷贝与深拷贝

变量的赋值操作只是形成两个变量,实际上还是指向同一个对象。
浅拷贝:Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝。
深拷贝:使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,原对象和拷贝对象所有的子对象也不相同。

class Person:
    def __init__(self,name,age) -> None:
        self.name = name
        self.age = age
# 浅拷贝
p = Person('小明',23)
p1 = p 
print(id(p)) # 2538254986824
print(id(p1)) # 2538254986824
#实例p和实例p1的指向的内存地址是一样

#深拷贝
from copy import deepcopy
p2 = deepcopy(p)
print(id(p)) # 2536288185648
print(id(p2)) # 2536288322392
#实例p和实例p1的指向的内存地址是不一样,不是同一个内存地址。
STM32移植LVGL(LittleVGL) **STM32移植LVGL(LittleVGL)** 阅读详情

相关推荐

避开这些坑!baostock获取股票数据时最容易犯的5个错误(Python实战)

本文针对使用Python和baostock库获取股票历史数据时常见的五大陷阱,提供了实战解决方案。重点剖析了登录状态验证、参数配置、数据解析、批量操作效率及数据一致性校验等关键环节,帮助开发者构建稳健高效的数据获取流程,避免因细节疏忽导致的数据错误或性能瓶颈。

websocket5live的博客 1441

Java 对象和类

Java 对象和类

Thinking In Java 1万+

华为云CodeHub代码托管

什么是代码托管 代码托管(CodeHub)是面向软件开发者的基于Git的在线代码托管服务,是具备安全管控、成员/权限管理、分支保护/合并、在线编辑、统计服务等功能的云端代码仓库,旨在解决软件开发者在跨地域协同、多分支并发、代码版本管理、安全性等方面的问题。 代码托管具有以下特性 · 在线代码阅读、修改、提交,随时随地开发,不受地域限制。 · 在线分支管理,包含分支新建、切换、合并,实现多分支并行开发,效率高。 master分支:最为稳定,功能比较完整,随时可发布的代码。 develop分支:用于平时开

LUJINYUANA的博客 1万+

类和对象(4.3):一个完整的例子带你深入类和对象

.3.3编写麻将类 一般情况下,我们编写一个类的步骤分3步:定义类名、编写属性、编写方法。上面我们还提到过公有类,当一个类被public修饰符修饰的时候,这个类就是公有类,公有类可以被整个程序中任意一个其他类引用,具体关于类的修饰后面会讨论。定义一个类的基本格式如下: 修饰符 class 类名{ 属性 构造方法 其他方法 } 我们按照这个格式,先编写麻将类,从示意图上我们看到,麻将类很简单,只有一个属性,没有方法: 复制代码 public class Mahjong { privat

ting2909的博客 1063

SAR成像系列:【3】合成孔径雷达(SAR)的二维回波信号与简单距离多普勒(RD)算法 (附matlab代码)

二维回波信号分析

zr2006_7的专栏 2万+

【GlobalMapper精品教程】001:GlobalMapper23+24+25 Pro-x64中文汉化版安装教程(附软件包下载)

Global Mapper 23+V24+V25中文汉化版安装教程及免费下载地址,是一款非常专业的地图绘制软件,功能非常的丰富,内置距离和面积计算,包括光栅混合、对比度调节、海拔高度查询、视线计算以及一些高级功能,通过地表数据观察分水岭、对3Dpoint数据转换为三角多边形和网格化等设置。本文讲解GlobalMapper23.1 Pro-x64安装过程。

智慧空间实验室 3万+

世界万物皆对象(类和对象)

1.类 类是对象的抽象 比如:人类,汽车类,电脑 一个类有无数个对象 2.对象 对象是类的实例化(实际的例子)比如:小陈,摩托车,华为电脑 2.1 对象的属性——对象具有的各种特征 每个对象的每个属性都拥有特定值 比如:小陈的电脑是灰色的这就是对象的属性(本身拥有的特性) 2.2对象的方法 比如:小陈的电脑可以上网浏览页面这就是对象的方法(功能) 2.3抽象与类 类是具有相同属性和共同行为的一组对象的集合。 每个对象的属性值可以不一样 2.4类与对象的关系 类是对对象...

weixin_54931086的博客 1936

Python 爬虫实战:爬取微博热搜与用户评论数据

本文系统讲解微博热搜榜单与用户评论数据的爬取技术方案。针对微博热搜榜采用Requests+BeautifulSoup解析静态HTML结构,实现高效爬取;对于动态加载的评论数据,使用Selenium模拟浏览器行为规避反爬机制。详细阐述技术选型、反爬策略、数据清洗及存储方法,提供完整代码实现和输出示例。同时强调合规要求,提示开发者需在遵守平台规则的前提下进行数据采集。该方案为舆情分析和热点研究提供了可落地的技术实现路径。

2503_91057718的博客 1716

类和对象例子

public class Yu { int we; public Yu(String name){ System.out.println("人的名字是"+name); } public void setAge(int age){ we=age; } public int getAge(){ System.out.println("年龄是"+we); return we; }

qq_36742206的博客 573

springboot+vue项目基础开发(12)vue项目的搭建

在src目录下新建 api,utils,views文件夹。删除componets目录下自动生成的所有文件。在utils文件夹下创建request.js。启动项目,记得是要在管理员下启动。

m0_58498702的博客 153

29、5G PUCCH格式及资源配置详解

本文详细解析了5G通信系统中的物理上行控制信道(PUCCH)的不同格式及其资源配置方案。PUCCH负责传输上行控制信息(UCI),包括混合自动重传请求(HARQ)确认信息、调度请求(SR)和信道状态信息(CSI)等。文章从PUCCH的基本概念出发,深入分析了格式0到格式4的特点、编码调制方式、干扰随机化机制以及适用场景,并探讨了PUCCH资源集的配置方法和上行控制信令在PUSCH上的传输机制。通过对比不同格式的传输能力、干扰随机化方式和频率跳变能力,为读者提供了选择合适PUCCH格式的决策依据。最后,文章总

oil88的博客 252

11.Python 组合+类、类对象,实例对象

1.创建一个Python 文件 class Turtle: def __init__(self,x): self.num=x class Fish: def __init__(self,x): self.num=x class Pool: def __init__(self,x,y): self.turtle=Turtle(x) self.fish=Fish(y) def print

huanhuan59的博客 314

基于Simulink的永磁同步电机力位混合控制(导纳+位置)仿真

本文详细介绍了基于Simulink的永磁同步电机(PMSM)力位混合控制系统实现方法。主要内容包括:1) 通过导纳控制原理(二阶质量-阻尼-弹簧模型)实现机器人柔顺控制;2) 在Simulink中构建虚拟环境、导纳控制器、PMSM驱动系统等完整框架;3) 针对曲面恒力打磨场景,实现20N恒力跟踪(RMS误差1.2N)和位置顺应;4) 支持纯位置/导纳/恒力三种工作模式切换;5) 提供系统性能评估指标和高级扩展功能。该方案显著提升了机器人环境交互的安全性和适应性,适用于精密装配、人机协作等应用场景。

xiaoheshang_123的博客 147

C++学习总结11--类和对象,类的定义和实例化

小记:静默如初,安之若素 1. 类和对象 1. 什么是对象 万物皆对象,任何一种事物都可以看做是对象。 2. 如何描述对象 通过对象的属性(名词,数量词,形容词)和行为(动词)来描述对象。 eg:描述冰箱对象 属性:品牌,容量,颜色,功耗 行为:装东西,冷冻,冷藏 3. 面向对象的程序设计 对自然世界中对象的描述引入到编程实践的方法,这种方法称为“数据抽象”,即在描...

RedDrn的博客 1132

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

11.11学习日志(类的定义与对象的实例化)

类的定义与对象的实例化 ————————————————————————————— 如何定义一个类 新建一个java class文件 文件名就是类名 给类中添加属性 ————————————————————————————— 方式同定义普通的变量一样 利用类生成对象 类名 变量名 = new 类名(); 在另一个文件的main函数中 按照格式实例化类得到一个对象 给对象的属性赋值 对象名.属性 = 值; 比如 狮子玩具.price = 10 狮子玩具.color = “红色” 获取对象的属

m0_51755975的博客 156

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python类的多个实例化_11. Python对象实例化中变量的互相影响

编程过程中发现了一个问题,问题如下:class MyClass(object):def __init__(self,lis=[]):self.num = 0self.lis = lisclassInit1 = MyClass()classInit1.num = 1classInit1.lis.append(1)classInit2 = MyClass()classInit2.num = 2clas...

weixin_39634579的博客 459

11面向对象编程-类、实例、访问限制、数据封装

类(Class)和实例(Instance) 类是抽象的模板 实例是根据类创建出来一个个具体的“对象”,每个对象都具有相同的方法,但各自的数据可能不同 定义类(class) class 类名(类名通常首字母大写)(object): object类是所有类最终都会继承的类 创建实例 实例1 = 类名 + () 如: Zhangsan = Student() 由于类是实例的模板,故可以在类中创建一些属性,只要是该类实例都具有该属性 方法可以通过__init__方法 _init_(self,…):

无他,惟手熟尔 225

【Python入门】11.面向对象编程之 类、实例与方法

本学习笔记基于廖雪峰的Python教程,更新于2019年11月24日。欢迎与博主一起学习Pythonヽ( ̄▽ ̄)ノ 本节内容包括:面向对象编程的思想介绍;类的定义与属性;实例的定义与属性;方法。

三贝 316

2020/11/24 实习笔记——C#Lambda 协程 接口实例化对象 Dictionary.TryGetValue() HideFlags类

C#   HideFlags类 HideFlags.NotEditable; 整个对象的inspector面板在运行时都不可编辑 HideFlags.NotEditable; 对象上的某个属性在运行时不可编辑 HideFlags.HideInHierarchy; 运行时该对象不会出现在hierarchy面板上,但是scene视图和game视图上还能看到 HideFlags.HideInInspector; 在运行时该对象的inspector面板属性不可见 HideFl

FragrantPig的博客 702

2020-11-24

Java11-24笔记 续11-23面向对象。P184 属性:成员变量 VS局部变量 成员变量 相同点: 定义变量的格式: 数据类型 变量名= 变量值 先声明,后使用 变量都有其对应的作用域。吗 不同点: 将声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量。 关于权限修饰符的不同 属性:可以在声明属性时,指明其权限、使用权限修饰符。 常用的权限修饰符。 private \public\确省(没有任何修饰。类似 String name;)、protected 。

weixin_44497661的博客 221

C++ 学习笔记(三)—— 入门+类和对象

之前有说过,在C++中兼容的结构体,本质上已经升级为了类,但是纯正的类,更喜欢用class作为定义类的关键字;而且,struct和class还是有一定的区别的,主要就是在访问限定符的使用上。访问限定符:public(公有)、protected(保护)、private(私有)【目前暂时可以将保护和私有看作是一样的】——公有在类的外面可以访问,保护和私有只能在类里面访问;类定义了一个新的作用域,类的所有成员都在类的作用域中。该方案在常规情况下价值比较低,只有在类型名字很长的时候才能体现它的价值;

shaggy123456的博客 478

C++ 类的数据成员初始化,重点解析类内初始值、static和const成员的初始化问题。

         1.实例化的过程 首先,应该明确类需要定义,但类不是真实存在的对象,类的定义过程是对类的一个“声明”,并不会为其分配内存(包括static成员,也因此static成员必须类内声明,类外定义(初始化))。 必须通过构造函数才能将类实例化,这样类的数据成员才会被分配内存。 由于static成员属于类不属于各个对象,所以其不能通构造函数初始化,必须通过类外初始化,才能分配内存。至...

bugkiller 1557

小白学习老九君C++笔记(10) 使用类创建对象

qqw

weixin_42592666的博客 269

[C++基础]-类和对象(上篇)

知道什么是内联函数吗?这里详细讲了auto的用法,类和对象,this指针。想知道就快来看吧

分享技术 1340

怎样根据类创建对象?

在例11-1中,定义了一个Car类,类里面定义了move和toot两个方法,然后创建了一个Car类的对象jeep,动态地添加了color属性且赋值为“黑色”,然后依次调用了move和toot方法,并打印输出了color属性的值。程序要想完成具体的功能,仅有类是远远不够的,还需要根据类来创建实例对象。在上述代码中,cat实际上是一个变量,可以使用它来访问类的属性和方法。接下来,通过一个完整的案例来演示如何创建,添加属性并且调用方法,如例11-1所示。程序运行的结果如图11-3所示。图11-3 运行结果。

zy1992As的博客 322

C++类和对象详解

本文介绍了C++类和对象的语法知识

博客记录学习轨迹,方便日后复习 736

JS 11——①什么是对象、类?②如何创建对象?③对象创建好了之后,如何使用?④“构造函数”怎么做?⑤学习“实例方法”与“静态方法”⑥typeof和instanceof分别是干什么用的?

①什么是对象、类?②如何创建对象?③对象创建好了之后,如何使用?④“构造函数”怎么做?⑤typeof 和 instanceof 分别是干什么用的?

weixin_48796690的博客 180
上一篇: 10-异常处理机制
下一篇: 12-模块和包
b14050421
博客等级 码龄9年 49粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值