GVKun编程网logo

将self .__ class__设置为其他东西有多危险?(class中self)

21

本文的目的是介绍将self.__class__设置为其他东西有多危险?的详细情况,特别关注class中self的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解将sel

本文的目的是介绍将self .__ class__设置为其他东西有多危险?的详细情况,特别关注class中self的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解将self .__ class__设置为其他东西有多危险?的机会,同时也不会遗漏关于class.__mro__、class.mro()、class.__subclasses__()如何使用、get_class和__CLASS__区别、linux – 打断fsck有多危险?、linux – 这个bash脚本有多危险?的知识。

本文目录一览:

将self .__ class__设置为其他东西有多危险?(class中self)

将self .__ class__设置为其他东西有多危险?(class中self)

假设我有一个类,其中包含许多子类。

我可以实例化该类。然后,我可以将其__class__属性设置为子类之一。我已经在活动对象上有效地将类类型更改为其子类的类型。我可以在其上调用调用这些方法的子类版本的方法。

那么,这样做有多危险?看起来很奇怪,但是这样做是 错误 的吗?尽管可以在运行时更改类型,但这是否应该完全避免该语言的功能?为什么或者为什么不?

(根据回复,我将针对我想做什么以及是否有更好的选择发布一个更具体的问题)。

答案1

小编典典

这是我能想到的导致危险的列表,从最坏到最坏的顺序排列:

  • 这可能会使阅读或调试您的代码的人感到困惑。
  • 您将没有正确的__init__方法,因此您可能不会正确初始化(甚至根本不)初始化所有实例变量。
  • 2.x和3.x之间的差异非常明显,以至于移植起来可能很痛苦。
  • 在某些情况下,类方法,手工编码的描述符,方法解析顺序的钩子等等,在经典类和新型类之间(以及在2.x和3.x之间),它们是不同的。
  • 如果使用__slots__,则所有类都必须具有相同的插槽。(并且,如果您具有兼容但不同的插槽,则乍一看似乎可以正常工作,但是却做得很糟糕……)
  • 新型类中的特殊方法定义可能不会更改。(实际上,这将在实践中与所有当前的Python实现一起使用,但是没有 文档记录 ,因此……)
  • 如果使用__new__,事情将不会像您天真的预期那样工作。
  • 如果这些类具有不同的元类,那么事情将变得更加混乱。

同时,在许多您认为有必要的情况下,还有更好的选择:

  • 使用工厂动态创建适当类的实例,而不是创建基础实例,然后将其装入派生实例。
  • 使用__new__或其他机制来钩住构造。
  • 重新设计事物,使您拥有一个具有某些数据驱动行为的单一类,而不是滥用继承。

作为最后一个最常见的特定情况,只需将所有“变量方法”放入其实例作为“父”数据成员保存的类中,而不是子类中即可。不要改变self.__class__ =OtherSubclass,而要做self.member =OtherSubclass(self)。如果您确实需要进行神奇更改的方法,那么自动转发(例如via
__getattr__)比动态更改类更为常见和Python化。

class.__mro__、class.mro()、class.__subclasses__()如何使用

class.__mro__、class.mro()、class.__subclasses__()如何使用

本篇内容介绍了“class.__mro__、class.mro()、class.__subclasses__()如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

class.__mro__、class.mro()、class.__subclasses__()如何使用

 

实验代码展示:

# class Person():# class Person(object):# class Person:class Person:  # class Person(object):  # class Person:  # class Person(): 这三种写法都是可以的
  '''定义基类Person'''
  def __init__(self, name, age):'''初始化属性name和age'''self.name = name
    self.age = age  def printInfo(self):print(  '---我是一个实例对象, 属于类型:{0:^35}   ---我的名字是: {1:{3}<8}   ---我的年龄是: {2:<5}'.format(str(self.__class__), str(self.name), str(self.age), chr(12288)  ))if __name__ == "__main__":print()per = Person('林麻子',15)per.printInfo()print('-'*50)print(Person.__mro__)print(Person.mro())print(Person.__subclasses__())print('*'*50)

控制台下执行结果:

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。

尝试新的跨平台 PowerShell https://aka.ms/pscore6

加载个人及系统配置文件用了 1016 毫秒。(base) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq> conda activate ssd(ssd) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq>  & 'D:\Anaconda3\envs\ssd\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2020.12.424452561\pythonFiles\lib\python\debugpy\launcher' '63627' '--' 'c:\Users\chenxuqi\Desktop\News4cxq\test4cxq\test21.py'---我是一个实例对象, 属于类型:     <class '__main__.Person'>        ---我的名字是: 林麻子        ---我的年龄是: 15   
--------------------------------------------------(<class '__main__.Person'>, <class 'object'>)[<class '__main__.Person'>, <class 'object'>][]**************************************************(ssd) PS C:\Users\chenxuqi\Desktop\News4cxq\test4cxq>

“class.__mro__、class.mro()、class.__subclasses__()如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注小编网站,小编将为大家输出更多高质量的实用文章!

get_class和__CLASS__区别

get_class和__CLASS__区别

__CLASS__永远返回调用__CLASS__的类的名字 get_class返回当前对象的所在的类的名字

linux – 打断fsck有多危险?

linux – 打断fsck有多危险?

打断fsck有多危险?

有没有人有这方面的直接经验?

解决方法

我没有任何直接的知识或证据,但对我来说,处理SIGINT只是显而易见的.

嗯.实际上,我可以提供一些保证:strings / sbin / fsck | grep sig报告:

sigaction
Warning... %s for device %s exited with signal %d.

因此,我将把这作为fsck开发人员正在呼吁处理相关信号的证据.

linux – 这个bash脚本有多危险?

linux – 这个bash脚本有多危险?

警告:危险的脚本.不要从命令行运行!

在公司的笑话电子邮件中看到这一点.有人可以向我解释为什么这个bash脚本比普通的’rm -rf’命令更危险吗?:

nohup cd /; rm -rf * > /dev/null 2>&1 &

特别是,为什么使用nohup以及最后的元素是什么?

警告:危险的脚本.不要从命令行运行!

解决方法

2>& 1采用stderr(文件句柄2)并重定向到stdout(文件句柄1). &安培;单独将rm命令放在后台.即使在启动它的人注销后,nohup也允许工作继续运行.

换句话说,即使用户ragequits他们的终端/ shell,这个命令也会尽力消灭整个文件系统.

关于将self .__ class__设置为其他东西有多危险?class中self的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于class.__mro__、class.mro()、class.__subclasses__()如何使用、get_class和__CLASS__区别、linux – 打断fsck有多危险?、linux – 这个bash脚本有多危险?的相关知识,请在本站寻找。

本文标签: