我在玩python来理解它是如何工作的,但是有一些奇怪的东西。我在我的__new__中定义了一个MetaClass方法,我希望第四个参数(它是类的属性块)包含在我的类中定义的方法。
我有这样的代码:
#!/usr/bin/python3
class MyMetaClass(type):
def __new__(metacls, name, bases, attrs):
instance = super(MyMetaClass, metacls) #Create instance of super class, which metaclass is type
在我当前基于python和django的应用程序中,我为date创建了一个自定义小部件。
from datetime import date
from django.forms import widgets
class DateSelectorWidget(widgets.MultiWidget):
def __init__(self, attrs=None):
# create choices for months, years
# example below, the rest snipped for brevity.
years
我编写了一个小类来尝试使用自定义的__getattr__方法,每次运行它,我都会得到一个属性错误:
class test:
def __init__(self):
self.attrs ={'attr':'hello'}
def __getattr__(self, name):
if name in self.attrs:
return self.attrs[name]
else:
raise AttributeError
t = test()
pr
当我使用attrs库创建类时,PyCharm中的docstring显示了一个未解析的属性引用的链接错误。
另一方面,当我正常使用__init__方法创建类时。它没有显示出这样的错误。
我无法确定此错误是由attrs或PyCharm生成的,因为attrs默认具有用于类型检查的所有必要存根。在使用attrs时,到目前为止,除了在docstring中,我还没有发现任何linting错误。
import attr
@attr.s
class UsingAttrs:
"""
class created using attrs shows linting err
我遇到了一些关于django-crispy-form的小问题。
我目前有一个表单,它成功地显示了我的模型中的所有字段。
但是,我想将html-attribute name更改为其他属性。我意识到这可能很困难,因为django-crispy-forms可能希望名称与模型中的字段相同。
我设法更改了id,但name不会更新。除了更改数据库中我的列的名称之外,是否有可能修复此问题?
示例代码
from django import forms
from crispy_forms.helper import FormHelper
class CompanyForm(forms.ModelForm):
class Config(abc.ABC):
def __init__(self, config_path: Union[str, PathLike]):
with open(config_path, "w+") as file:
self._config = yaml.load(file, Loader=yaml.BaseLoader)
user_defined_attrs = {k: v for k, v in self.__class__.__dict__.items() if not k.start
我有一个表单,我需要显示我的项目以外的管理领域,有些字段不能编辑,但可以看到他们。
要做到这一点将是伟大的"AdminReadonlyField“在"django.contrib.admin.helpers”中发现的问题是,您不能这样做。
我试图创建一些可以替换这个复杂类的小部件,但是我无法让它与DateTiemField字段正常工作。
class UserUpdateForm(forms.ModelForm):
"""
We need field "date_joined" can not be edited
我正在学习python 3中的元类编程,但是我有一些问题
class UpperAttrMetaClass(type): # to uppercase all attrs
def __new__(mcs, class_name, class_parents, class_attr):
attrs = ((name, value) for name, value in class_attr.items() if not
name.startswith('__'))
uppercase_attrs = dict((n
基于
In [65]: %paste
class Thing(object):
def __init__(self, obj):
self.legs = 4
self.obj = obj
def length(self):
return 6
class Thing2(object):
def __init__(self):
self.arms = 2
## -- End pasted text --
In [66]: t = Thing2()
In [67]: x = Thing(t)
In [6
我正在尝试向django ModelForm中的输入添加类,如下所示:
from django import forms
from .models import OrderProject
class OrderProjectForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(OrderProjectForm, self).__init__(*args, **kwargs)
for field in self.fields:
if field.widg
请帮助我理解为什么以下不起作用。特别是,被测试类的实例属性在Python的unittest.Mock中不可见。
在下面的示例中,无法访问bar实例属性。返回的错误是:
AttributeError: <class 'temp.Foo'> does not have the attribute 'bar'
import unittest
from unittest.mock import patch
class Foo:
def __init__(self):
super().__init__(self)
se
假设我们有一个attrs类: @attr.s()
class Foo:
a: bool = attr.ib(default=False)
b: int = attr.ib(default=5)
@b.validator
def _check_b(self, attribute, value):
if not self.a:
raise ValueError("to define 'b', 'a' must be True")
if value &l
我试图在一个值上动态地添加一个“可锁定”特性。虽然这个特殊的情况看起来很琐碎,或者说是人为的,但我想为各种不同的用例扩展可锁定的混合类。我不想创建一个一次性的可锁定值;我希望这个值足够通用,可以控制任意数量的类属性。
我做完后,我的期望是,最后的断言将过去。
我曾经尝试使用Super而不是self.setattr,但是我收到了一个错误,即该属性是只读的。这让我想知道我能不能做我想做的事。
任何帮助将不胜感激和感谢在事先!
一些代码:
from collections import OrderedDict as OD
def lockable(func, locked=None):
是否可以从其定义表达式中调用的内部函数访问类?
def called_inside_definition():
# I want to access 'Foo' here
class Foo:
called_inside_definition()
*这里的目标是为类修饰器提供替代语法:
@decorate
class Foo:
pass
更新:为什么我一开始就问这个
我想提供一个装饰器来定义委托的方法/属性。
class Bar:
def grok(self):
return 'grok'
@delegate(
我使用Kivy的recycleview以类似于表格的方式显示数据列表。我使用example from the docs作为我的实现的基础。 在我的程序中,RecycleDataView是基于BoxLayout的,它的子部件是动态生成的。 这似乎是有效的,但项目的显示顺序有时是颠倒的,并且如果您调整窗口大小,它会一直改变。更糟糕的是,如果你向下滚动,布局会变得非常疯狂。如果我使用一个简单的标签作为item类,就不会发生这种情况,所以我猜问题出在我动态创建的小部件逻辑上,但我不明白为什么。 以下是显示该问题的一些最小代码。 from kivy.app import App
from kivy.l
见完整的要点
假设我们有一个简单的元类,它为类生成__init__方法。
class TestType(type):
def __new__(cls, cname, bases, attrs):
# Dynamically create the __init__ function
def init(self, message):
self.message = message
# Assign the created function as the __init__ method.
attrs[&
我有以下代码:
#-*-coding:utf-8-*-
class A(object):
def __init__(self, x):
self.x = x
def __getattr__(self, name): # `__getattr__` will be called undefined attribute
print "get: ", name
return self.__dict__.get(name)
def __setattr__(self, name, value):
我正在为一些Django而苦苦挣扎,在那里我想做一个结合了MultiWidget的自定义MultiValueField。我读过misc。教程,但我似乎遗漏了一些东西-大多数都很旧了,我怀疑这可能是原因。
我使用的是Django 1.10。
目标:创建一个为表单提供三个下拉列表的自定义字段。到目前为止,对下拉列表的内容没有要求-首先,我只想在我的表单中看到它们:-)
我有一个fields.py文件,其中包含:
from django import forms
from widgets import MyCustomWidget
class MyCustomField(forms.MultiVa