问题标签 [new-style-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 为什么 setter 在新式类和旧式类中的行为不同
使用 python 2.7,假设我有一个Test
具有下面定义的新型类语法的类。
运行上面的代码将打印5,4,4
出所需的行为。但是,如果我将上面代码的第一行更改为,class Test:
则结果变为5,4,5
.
有谁知道是什么导致了这种输出差异?
python - 我们如何强制 getattribute() 为魔术方法(特殊方法)调用?
python 文档指出在__getattribute__
查找特殊方法时可能会被绕过。这是通过语言语法或内置函数隐式调用的结果。
例如,
不一样:
下面是另一个例子:
我想编写一个名为的MagicOverrider
类,例如继承自MagicOverrider
always的任何类都调用__getattribute__
,而不是绕过它。我的问题是我们怎么能做到这一点?
我尝试了以下方法:
但是,我的解决方案至少有两个问题:
- 如果在未来的 python 版本中引入了新的魔法方法,它将不再起作用
- 第一行,
class MagicOverrider:
, 抛出TypeError: 'function' object is not iterable
python - python中的对象和类型有什么区别
众所周知,Python 2.x 中有两种类型的类,如旧样式类和新样式类
Oldstyle 类的type
实例总是instance
新样式类有,等优点method descriptors
, NewStyle 类的实例就是类名本身super
getattribute
type
当您检查 NewStyle 类的类型是类型并且类型object
也是类型时
那么继承新样式类的概念是什么object
,正如我们在上面看到的那样,type(type)
也是type
,type(object)
也是type
为什么我们不能直接继承新的样式类type
?
我们可以假设以下几点来区分object
和type
吗?
- 如果我们从下面继承/创建一个类
type
,我们肯定会最终创建一个元类吗?(一切都是python中的对象,包括类,都是其他类的对象type
)
class NewStyle(type):
pass
当 Python 解释器看到上面的代码时,它会创建一个类型为class
(类对象)的对象/实例,名称为 NewStyle(它不是普通实例,而是类对象)
- 如果我们从 继承/创建一个类
object
,它将创建该类的普通实例/对象
class NewStyle(object):
pass
isinstance(NewStyle, type)
obj = NewStyle()
print isinstance(obj, NewStyle) # True
print isinstance(NewStyle, type) #True
print isinstance(NewStyle, object) #True
print isinstance(object, type) # True
print isinstance(type, object) # True
那么最后我们使用type
创建类,但我们使用object
创建实例?
python - 如何从仅影响一个类的内置函数中导入对象?
我正在将代码从 python2 转换为 python3 用于newstyle
使用future
. 我的项目在 Django 1.11 中
我在 forms.py 中有一个类:
在 Python 2 中
转换为:
在 Python 3 中
我有一个 selenium 测试,它在转换为 Python3 后调用此表单时失败,并出现以下错误:
但是,当我删除导入时from buitlins import object
,测试通过了。
但是当我添加了一个未来的检查时,我得到了一个未来的差异错误,因此每个类都必须转换为 newstyle。我希望它在 Python2 和 Python3 中都能工作。
有没有办法这个模块builtins
模块导入可以只影响一个类而不影响forms.py
文件中的其他类。还是有其他方法可以解决这个问题?
python - 从 python 抽象工厂中导入
我想创建一个抽象工厂,以便在 Python 2.7 中抽象计算机(比如 RaspberryPi 和 Arduino)之间的硬件差异。
我正在使用抽象工厂的以下实现:
实例化工作正常,但是当我尝试运行它时,我得到:
所以导入arduino_display
确实有效,但我找不到在对象中使用它的方法。
需要条件导入,因为不同的平台将安装不同的模块。
知道如何使用这些条件导入吗?
我尝试过self.arduino_display
,ArduinoDisplay.arduino_display
但无济于事。
我显然可以捕获导入错误,例如添加到顶部:
...这会在 RPI 上失败,这很好,但必须有更好的方法...