小编gal*_*ant的帖子

为什么django模型类不是"类型"类型?

使用python manage.py shell在django项目根目录下打开python shell,并观察以下内容:

>>> class A(object): pass #checking type of user-defined class
...
>>> type(A)
<type 'type'>
>>> class B(A): pass #checking type of child class
>>> type(B)
<type 'type'>
>>> from collections import OrderedDict #checking type of imported class
>>> type(OrderedDict)
<type 'type'>
Run Code Online (Sandbox Code Playgroud)

现在看看这个:

>>> from my_project.models import MyModel
>>> type(MyModel)
<class 'django.db.models.base.ModelClass'>
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这里发生了什么吗?Django模型明确定义为models.py中的类:

class MyModel(models.Model):
  pass
Run Code Online (Sandbox Code Playgroud)

那么为什么它们在进口时不属于"类型"?Django是通过一些黑色魔法改变模型类型的,还是我只是遗漏了一些明显的东西?

python django

8
推荐指数
0
解决办法
369
查看次数

我可以完全停止使用datetime.date吗?

在Python中,我的印象datetime.date基本上只是一个子集datetime.datetime,具有更少的功能和更少的开销.我想永远不要再使用datetime.date,原因如下:

  • 这两种类型之间不再有转换!

  • datetime.date由于显而易见的原因,对象始终是时区不知道的.这使得在整个应用程序中概括时区处理变得更加困难,如果有时您正在使用datetime.date,有时您正在使用datetime.datetime

  • 在很多情况下,我偶然遇到头痛,比较datetime.date物体和datetime.datetime物体.始终只使用一种类型使比较更简单.

  • 格式化之间的差异datetime.date,并datetime.datetime应该是一个格式化的唯一问题.将差异进一步深入到底层类中会给语言带来不必要的复杂性.

  • 如果我对这个在正确的轨道上,那么datetime.date最终将在Python的未来版本过时了,就像unicodelong已.现在采用这个惯例使我领先于曲线.

在我看来,继续使用的唯一令人信服的论点datetime.date是涉及的少量额外内存和存储datetime.datetime.让我们说我不关心这个额外的开销.有没有其他非常令人信服的理由继续使用这门课程?我不想切换到这个惯例,然后后悔,因为我错过了一些重要的事情.

python datetime date

7
推荐指数
2
解决办法
266
查看次数

使用collections.OrderedDict是不好的做法吗?

我喜欢使用collections.OrderedDict有时我需要一个关联数组,其中应该保留键的顺序.我有这个的最好的例子是解析或创建csv文件,其中将列的顺序隐式保留在对象中是有用的.

但是我担心这是不好的做法,因为在我看来,关联数组的整个概念是键的顺序永远不重要,并且依赖于排序的任何操作都应该只使用列表,因为这就是为什么列表存在(这可以在上面的csv示例中完成).我没有这方面的数据,但我愿意打赌,列表的性能普遍优于OrderedDict.

所以我的问题是:OrderedDict有没有真正引人注目的用例?csv用例是一个很好的例子,它应该在哪里使用还是坏的?

python

6
推荐指数
2
解决办法
1198
查看次数

如何在python中实现属性pop

在 Python 中,dict 对象有一个“pop”方法,它返回并从 dict 中删除一个键,如果键不存在,则有一个可选的默认值。

对一般对象属性执行此操作的最佳方法是什么?

我在想:

my_obj.__dict__.pop('key_name', default)
Run Code Online (Sandbox Code Playgroud)

应该是一个不错的选择,但我担心直接静音对象的dict可能会产生我不知道的意外副作用。有更好的选择吗?

python

5
推荐指数
1
解决办法
3415
查看次数

在ES6中是否有与Python风格的类属性相同的东西?

Python类具有这个简洁的功能,您可以使用@property装饰器修饰类方法,这使得该方法显示为静态值成员而不是可调用成员.例如,这个:

class A(object):

    def my_method(self):
        return "I am a return value."

    @property
    def my_property(self):
        return "I am also a return value."
Run Code Online (Sandbox Code Playgroud)

导致以下行为:

>>> a = A()
>>> a.my_method()
'I am a return value.'
>>> a.my_property
'I am also a return value.'
Run Code Online (Sandbox Code Playgroud)

最后,我的问题是:是否有任何内置语法在ES6类中提供类似的行为?我还不是文档专家(但是)到目前为止我没有看到任何提供此类功能的内容.

javascript python oop ecmascript-6

4
推荐指数
1
解决办法
493
查看次数

为什么selenium webdriver会在每次函数调用时访问网络?

在Python中使用selenium webdriver编写了一个简单的测试函数:

from selenium import webdriver

def test_webdriver():
    web = webdriver.PhantomJS()
    web.get('http://example.com')
    web.find_element_by_tag_name('html')
    web.find_element_by_tag_name('head')
    web.find_element_by_tag_name('meta')
    web.find_element_by_tag_name('body')
    web.find_element_by_tag_name('title')
    web.find_element_by_tag_name('p')
    web.find_element_by_tag_name('div')
Run Code Online (Sandbox Code Playgroud)

这个函数花比预期更长的时间来运行,所以我用cProfile对它进行了分析,看到了一些这样的行:

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      ...
        9    0.000    0.000    0.157    0.017 .../python2.7/urllib2.py:386(open)
      ...
Run Code Online (Sandbox Code Playgroud)

这清楚地表明webdriver正在我的测试功能中的每次 find调用中访问网络.

我认为webdriver一次只抓取一次DOM get(),然后在本地搜索和操作它,类似于BeautifulSoup.显然它不是那样工作所以我留下了一些问题:

  • 这是webdriver的正常预期行为,还是我的错误配置?
  • 如果这正常行为,那么有没有办法强制webdriver 在每次函数调用时都不访问网络?
  • 什么是访问网络?它不能刷新每一页find,只是没有任何意义.

注意:我知道测试页面上的javascript可能会触发非预期的网络呼叫,这就是我使用http://example.com作为我的测试页面的原因,以消除这种可能性.

python selenium webdriver phantomjs

2
推荐指数
1
解决办法
398
查看次数