RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1600639
Accepted
Максим Намазов
Максим Намазов
Asked:2024-11-23 21:17:46 +0000 UTC2024-11-23 21:17:46 +0000 UTC 2024-11-23 21:17:46 +0000 UTC

在OOP中,有“类实例”的概念。这是真的吗?

  • 772

当我们创建一个类时,我们似乎有一个模板对象(我的意思是缩进类中编写的所有内容)和原始对象本身,可以通过类名访问它(类名是到此的链接)原始对象):

class InCap:
    name = 10

InCap.name = 203 #мы можем убедиться в существовании оригинального объекта, сразу изменив его атрибут
print(InCap.name) # Вывод : 203

在课程和教育材料中(至少在我学习的课程和教育材料中)据说我们可以创建类的实例,但事实证明我们正在创建原始对象的实例,而不是类的实例,因为默认情况下,实例继承所有属性,包括父属性(类模板中描述的属性)和本地属性(我们可以添加到原始属性中的属性):

Namer = InCap() #создали экземпляр оригинального объекта
# Добавим в оригинальный объект новый атрибут:
InCap.Unname = 30
print(f'новый атрибут оригинального объекта: {Namer.Unname}, родительский атрибут оригинального объекта: {Namer.Name}')
# Вывод: новый атрибут оригинального объекта: 30, родительский атрибут оригинального объекта: 203

我们看到实例从原始对象继承了 Name 和 Unname 属性(而不是从没有 Unname 属性的类继承),并且只有在我们覆盖它们之前才会发生这种情况:

Namer.Unname = 'переопределили'
Namer.Name = 'переопределили'
print(Namer.Unname, Namer.Name)# Вывод: переопределили переопределили Теперь это локальные атрибуты.
print(InCap.Name, InCap.Unname)# Вывод: 203 30

原始对象的属性保持不变,上面的更改不会影响本地属性:

print(Namer.Unname, Namer.Name)
print(InCap.Name, InCap.Unname)
# Вывод:
# переопределили переопределили
# изменили изменили

总而言之,我从来没有听说过创建原始对象的实例并从中继承属性,到处都有类的实例,但实际上事实证明模板与它无关,这种表述会导致混乱,至少对我来说。总的来说,如果您证实或反驳我的猜测,我会很高兴,提前感谢您的回答。

python
  • 2 2 个回答
  • 87 Views

2 个回答

  • Voted
  1. Best Answer
    Exci
    2024-11-24T02:33:47Z2024-11-24T02:33:47Z

    也许你的困惑是由于Python设计的一些特殊性引起的;一般来说,对于大多数语言来说,我们不能将类视为对象。在OOP中,如果我们脱离Python语言的上下文来理解它,类只是未来对象的模板指令;根据这条指令,编译器或解释器创建对象——分配内存,放置方法的代码及其地址, ETC。可以说,这是经典的类视图。这就是“类实例”概念的由来,与“类对象”相同——根据给定类的模板创建的对象。 Python 的一个特性是,一旦我们声明类,它们本身就是对象(顺便说一下,它们是另一个类的对象——它们的元类)。但在文献中,如果你读到“类对象”,它应该被理解为经典意义上的(也许除非这是一章致力于将类理解为Python中的独立对象)。您可以通过class字段查看对象属于哪个类:

    class Foo:
        n = 1
    
    f = Foo()
    
    print(Foo.__class__)
    print(f.__class__) 
    

    该代码将输出:

    <class 'type'>
    <class '__main__.Foo'>
    

    因为 Foo 是类类型的对象——它是所有对象的公共默认元类,而 f 是 Foo 的对象。

    值得记住的是,这样的系统是 Python 语言的一个特性,在其他语言中它是不同的,并且在一般情况下,类不是任何类型的对象,而只是一个绘图指令。

    • 6
  2. CrazyElf
    2024-11-24T02:37:40Z2024-11-24T02:37:40Z

    与往常一样,Python 的许多特性都是通过以下事实来解释的:在 Python 中,任何实体都是对象,而且是“一流对象”。类也是一个对象,就像类的实例一样。您可以即时更改类对象的某些字段。顺便说一句,您可以使用函数以及其他类型的对象来完成此操作,这些对象在其他语言中通常无法直接访问并且无法在其中进行更改。这在其他语言之后是不寻常的。

    但让我们回到我们的课堂。让我们再次概述一下Python的特点:

    • 类也是一个对象,只是类型的对象type
    • 您可以动态更改对象的许多属性(属性)
    • 当你创建一个类的实例时,Python没有任何“原始类示例”,它只有这个类对象,你已经覆盖了它的一些属性
    • 当创建类对象时,类属性被复制到其中

    嗯,那就是,是的。一切都如您所说,从 Python 的角度来看,这是完全合乎逻辑的。原则上,理论上,该语言的创建者可以维护两个单独的对象属性列表 - 那些在程序源代码中指定的列表,以及那些在程序执行期间添加的列表。但在 Python 中不存在这样的事情,其中​​所有实体都过着动态的生活,没有人跟踪对象在哪个阶段获得了某些属性。

    • 5

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5