V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  saximi  ›  全部回复第 9 页 / 共 11 页
回复总数  201
1  2  3  4  5  6  7  8  9  10 ... 11  
2017-08-20 16:46:33 +08:00
回复了 saximi 创建的主题 Python 请教安装 Scrapy 时的这个错误如何解决
@fiht 您说的 ahhh 是集成包么?哪里可以下载呢?谢谢
2017-08-20 16:45:48 +08:00
回复了 saximi 创建的主题 Python 请教安装 Scrapy 时的这个错误如何解决
@leoforza 谢谢这个网址的 twisted 可以顺利安装了
2017-08-20 15:53:58 +08:00
回复了 saximi 创建的主题 Python 请教安装 Scrapy 时的这个错误如何解决
@tennc 请问哪里可以下载第三方集成包呢?感谢!
2017-08-20 15:53:18 +08:00
回复了 saximi 创建的主题 Python 请教安装 Scrapy 时的这个错误如何解决
@leoforza lxml 我已经安装完毕了,twisted 我是从 https://pypi.python.org/pypi 上找的 Twisted-17.5.0.tar.bz2 ,解压后,用 pip install setup.py 来安装时提示:
Could not find a version that satisfies the requirement setup.py (from versions: )
No matching distribution found for setup.py

难道这个版本不适用于 32 位的 WINDOWS 7 么? 那这样就找不到其他版本了,我是 INTEL 的芯片。
2017-08-15 00:33:08 +08:00
回复了 saximi 创建的主题 Python 请教一个 random.random 的问题
@Kobayashi 呵呵,我知道是 a 的错误,开个玩笑啦
2017-08-12 19:11:59 +08:00
回复了 saximi 创建的主题 Python 请教一个 random.random 的问题
@rogerchen 这个错误确实经典,def f() 后面没有加冒号,哈哈
2017-08-12 10:41:45 +08:00
回复了 saximi 创建的主题 Python 请教一个 random.random 的问题
@rogerchen 感谢指点,这个代码不是我自己写出来的,是某个公众号里写的,只说这是经典错误,但是没说原因是什么,所以我发出来请教大家。
2017-08-11 23:39:01 +08:00
回复了 saximi 创建的主题 Python 请教一个问题(8.10)
@zhusimaji 感谢大家指点,因为网络问题,我暂时打不开 gist 网址,但是我查了一些资料,对这个问题感觉明白了,我的理解如下:
1、bound 变量指向了 x.double 这个方法,但并未调用该方法
2、方法名.__self__ 指的就是这个方法的 self 参数,例子中是 double 方法的 self 参数,即 x,它是一个 num 对象,这就是第一个输出的由来。
3、正因为 bound.__self__是 num 对象 x,所以 bound.__self__.v 也就是 x 的 v 属性,在这个例子中是 2

我的理解没错吧?
2017-08-10 00:05:07 +08:00
回复了 saximi 创建的主题 Python 请教一个运算符重载的问题
感谢!
2017-07-31 22:59:18 +08:00
回复了 saximi 创建的主题 Python 请教一个关于生成器表达式的问题
感谢大家指点!
2017-07-31 00:45:03 +08:00
回复了 saximi 创建的主题 Python 请教一个关于生成器的问题
@wisej 没问题了,我想明白了,谢谢!
2017-07-30 23:31:06 +08:00
回复了 saximi 创建的主题 Python 请教一个关于生成器的问题
@ErnestChan 哈哈,我倒希望是生殖器了,这样研究起来不会那么枯燥
2017-07-30 23:29:58 +08:00
回复了 saximi 创建的主题 Python 请教一个关于生成器的问题
@wisej 谢谢,既然这样的话,我要如何才能吧下一个 i 正确赋值给 X 呢,用 next(G)已经做不到了。
2017-07-29 01:55:03 +08:00
回复了 saximi 创建的主题 Python 请问怎么理解例子中类实例化的输出?
@wwqgtxx 顿首拜!!!
2017-07-28 22:13:10 +08:00
回复了 saximi 创建的主题 Python 请问怎么理解例子中类实例化的输出?
@wwqgtxx cpython 的源码我准备去看看,但是未必都能看懂,关于这一个知识点我准备硬记下来,请您看看我这么归纳对么?
存在一个类 Meta,Meta 是类 Clas 的元类,那么对于 Meta 类定义中的 type.__call__方法调用,实际上是去调用了类 Clas 的__new__和__init__方法
2017-07-28 21:15:52 +08:00
回复了 saximi 创建的主题 Python 请问怎么理解例子中类实例化的输出?
@wwqgtxx 太感谢你了!
既然 MyType 作为 Class_1 的 metaclass,导致 Class_1 类定义的时候会自动实例化一个 MyType 实例。
那么如果程序还有一个类 Class_2,且 Class_1 是 Class_2 的父类,那么在执行 Class_2 类定义的时候,是不是还会另外多执行一遍 MyType 的实例化动作(执行 new 和 init)?也就是说 Class_1 有多少个之类,MyType 就会被自动实例化多少次?
我从代码的输出来看,推断应该是这个处理方式,但是没想明白,为何在定义子类的时候,竟然会去将父类(Class_1)的元类进行实例化? 以及为何每个子类都要实例化一次元类,而不能所有的子类公用定义父类时实例化出来的元类?
2017-07-27 22:33:14 +08:00
回复了 saximi 创建的主题 Python 请问怎么理解例子中类实例化的输出?
@wwqgtxx 非常感谢您的耐心解答,我发现我现在就卡在这一句话上了:
"因为 type.__call__.调用了 Class_1.__new__呀…" 不明白这是一个什么知识点,我也查过一些博文和书,但是都没有深入提到这一点,能否再详细说明一下,或者有关于这点的透彻说明的文档推荐也行,万分感谢了!
2017-07-27 21:25:00 +08:00
回复了 saximi 创建的主题 Python 请问怎么理解例子中类实例化的输出?
@wwqgtxx 关于您说的第二点:“ metaclass 就是负责实例化这个过程的,即 类名(args)这个调用等同于 Meta 类名.__call__(类名,args) 而你自定义的类中的__new__和__init__本质上是 type.__call__调用的,所以造成了你看到的输出顺序”。我还是不明白。
我知道“ c = Class_1() ”会调用 Meta 类的 call 方法,我不理解的是执行这个 call 方法时,遇到这条语句“ rv = super(Meta_1, cls).__call__(*a, **kw) ”时到底发生了什么事,这时不就是执行 type.__call__方法么?怎么会输出“ entering Class_1.__new__() ” ? 这个输出难道不是只有在执行 Class_1.__new__方法时才会输出的么?
2017-07-27 21:19:33 +08:00
回复了 saximi 创建的主题 Python 请问怎么理解例子中类实例化的输出?
抱歉上面的格式太乱了,我不知道回复时不会做格式转换,下面是重新整理后的内容。
我之所以说在 import module 时,类定义中的__new__和__init__会被先执行是有例子的,参见下面的代码,
在主程序第一条语句(语句 1)之前,语句 2 和语句 3 就先被执行了,也就说__new__和__init__方法在执行主程序之前就执行了。我的理解对么?

class MyType(type):
def __init__(self, what, bases=None, dict=None):
super().__init__(what, bases, dict)
print("call MyType.__init__()") #语句 3
def __new__(cls, name, bases, attrs):
print("call MyType.__new__()") #语句 2
return type.__new__(cls, name, bases, attrs)
def __call__(self, *args, **kwargs):
print("MyType.__call__ ")
obj = self.__new__(self, *args, **kwargs)
self.__init__(obj)

class Foo(object, metaclass=MyType):
def __init__(self, name=None):
self.name = name
print("Foo.__init__ self=", self)
def __new__(cls, *args, **kwargs):
print("Foo.__new__ cls=", cls)
return(object.__new__(cls, *args, **kwargs))
def __call__(self, cls):
print("Foo.__call__ cls=", cls)


if __name__ == '__main__':
print("---------test1---------") #语句 1
obj2=Foo()

输出如下:
call MyType.__new__()
call MyType.__init__()
---------test1---------
MyType.__call__
Foo.__new__ cls= <class '__main__.Foo'>
Foo.__init__ self= <__main__.Foo object at 0x01C2B2B0>
2017-07-27 21:18:12 +08:00
回复了 saximi 创建的主题 Python 请问怎么理解例子中类实例化的输出?
我之所以说在 import module 时,类定义中的__new__和__init__会被先执行是有例子的,参见下面的代码,
在主程序第一条语句(语句 1)之前,语句 2 和语句 3 就先被执行了,也就说__new__和__init__方法在执行主程序之前就执行了。我的理解对么?

<p>class&nbsp;MyType(type):&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__init__(self,&nbsp;what,&nbsp;bases=None,&nbsp;dict=None):&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super().__init__(what,&nbsp;bases,&nbsp;dict)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("call&nbsp;MyType.__init__()")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#语句 3
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__new__(cls,&nbsp;name,&nbsp;bases,&nbsp;attrs):&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("call&nbsp;MyType.__new__()")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#语句 2
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;type.__new__(cls,&nbsp;name,&nbsp;bases,&nbsp;attrs)&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__call__(self,&nbsp;*args,&nbsp;**kwargs):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("MyType.__call__&nbsp;")
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj&nbsp;=&nbsp;self.__new__(self,&nbsp;*args,&nbsp;**kwargs)&nbsp;&nbsp;&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.__init__(obj)&nbsp;

</p><p>class&nbsp;Foo(object,&nbsp;metaclass=MyType):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__init__(self,&nbsp;name=None):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.name&nbsp;=&nbsp;name&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Foo.__init__&nbsp;self=",&nbsp;self)&nbsp;&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__new__(cls,&nbsp;*args,&nbsp;**kwargs):&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Foo.__new__&nbsp;cls=",&nbsp;cls)&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(object.__new__(cls,&nbsp;*args,&nbsp;**kwargs))&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__call__(self,&nbsp;cls):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Foo.__call__&nbsp;cls=",&nbsp;cls)&nbsp;&nbsp;
</p><p>&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</p><p>if&nbsp;__name__&nbsp;==&nbsp;'__main__':&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;print("---------test1---------")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#语句 1&nbsp;
</p><p>&nbsp;&nbsp;&nbsp;&nbsp;obj2=Foo()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

</p><p>输出如下:
</p><p>call&nbsp;MyType.__new__()
</p><p>call&nbsp;MyType.__init__()
</p><p>---------test1---------
</p><p>MyType.__call__&nbsp;
</p><p>Foo.__new__&nbsp;cls=&nbsp;<class&nbsp;'__main__.Foo'>
</p><p>Foo.__init__&nbsp;self=&nbsp;<__main__.Foo&nbsp;object&nbsp;at&nbsp;0x01C2B2B0>
</p>
1  2  3  4  5  6  7  8  9  10 ... 11  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2996 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 18ms · UTC 00:31 · PVG 08:31 · LAX 16:31 · JFK 19:31
Developed with CodeLauncher
♥ Do have faith in what you're doing.