当我有一个插槽主体的自定义实现时,我无法弄清楚如何使用Vuetify v2为我的数据表实现全选选项。
这是一个小例子:
<template>
<v-card
max-width="300"
class="pa-6"
>
<v-data-table
:items="tasks"
:headers="headers"
show-select
dense
>
<template v-slot:body="{ items }">
<tbody>
<tr
v-for="item in items"
:key="item.id"
>
<td>
<v-checkbox
v-model="selectedTasks"
:value="item.id"
style="margin:0px;padding:0px"
hide-details
/>
</td>
<td>{{ item.text }}</td>
<td>
<v-btn
text
icon
x-small
>
<v-icon>pageview</v-icon>
</v-btn>
</td>
</tr>
</tbody>
</template>
</v-data-table>
</v-card>
</template>
Run Code Online (Sandbox Code Playgroud)
<script>
export default {
data() {
return {
headers: [
{ text: 'task', value: 'text' },
{ text: 'actions' }
],
selectedTasks: [] …
Run Code Online (Sandbox Code Playgroud) __slots__
在Python中实现?__slots__
在C中定义Python类时如何获得行为PyTypeObject
?我正在尝试使用slots=True
Python 3.10.5 中的数据类调用超类方法。
from dataclasses import dataclass
@dataclass(slots=True)
class Base:
def hi(self):
print("Hi")
@dataclass(slots=True)
class Sub(Base):
def hi(self):
super().hi()
Sub().hi()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误。
Traceback (most recent call last):
File "...", line 16, in <module>
Sub().hi()
File "...", line 13, in hi
super().hi()
TypeError: super(type, obj): obj must be an instance or subtype of type
Run Code Online (Sandbox Code Playgroud)
slots=True
如果我从 中删除Sub
,或者手动将其设为非数据类,则效果很好__slots__
。如果我改为执行这些操作,错误仍然存在Base
。
Sub.__mro__
是(<class '__main__.Sub'>, <class '__main__.Base'>, <class 'object'>)
是isinstance(Sub(), Base)
。True
我有一个像这样的课
(defclass shape ()
((color :initform :black)
(thickness :initform 1)
(filledp :initform nil)
(window :initform nil)))
Run Code Online (Sandbox Code Playgroud)
如果我只知道这个类的实例,那么common-lisp中是否有一个函数如何获取这些插槽的列表?
我希望能够在具有插槽优化的类中使用python描述符:
class C(object):
__slots__ = ['a']
a = MyDescriptor('a')
def __init__(self, val):
self.a = val
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是如何实现描述符类,以便能够在调用描述符对象的类实例中存储值.通常的解决方案看起来像下面的解决方案,但由于在C类中调用"slots"时不再定义"dict",因此无法工作:
class MyDescriptor(object):
__slots__ = ['name']
def __init__(self, name_):
self.name = name_
def __get__(self, instance, owner):
if self.name not in instance.__dict__:
raise AttributeError, self.name
return instance.__dict__[self.name]
def __set__(self, instance, value):
instance.__dict__[self.name] = value
Run Code Online (Sandbox Code Playgroud) 如何使用 pickle 冻结数据类的实例__slots__
?例如,以下代码在 Python 3.7.0 中引发异常:
import pickle
from dataclasses import dataclass
@dataclass(frozen=True)
class A:
__slots__ = ('a',)
a: int
b = pickle.dumps(A(5))
pickle.loads(b)
Run Code Online (Sandbox Code Playgroud)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 3, in __setattr__
dataclasses.FrozenInstanceError: cannot assign to field 'a'
Run Code Online (Sandbox Code Playgroud)
如果我删除frozen
或__slots__
. 这只是一个错误吗?
我有一个带有(某种)getter 方法的数据类。
此代码按预期工作:
from dataclasses import dataclass
@dataclass()
class A:
def get_data(self):
# get some values from object's fields
# do some calculations
return "a calculated value"
@dataclass()
class B(A):
def get_data(self):
data = super().get_data()
return data + " (modified)"
b = B()
print(b.get_data()) # a calculated value (modified)
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加slots=True
,我会得到TypeError
:
from dataclasses import dataclass
@dataclass(slots=True)
class A:
def get_data(self):
return "a calculated value"
@dataclass(slots=True)
class B(A):
def get_data(self):
data = super().get_data()
return data + " (modified)" …
Run Code Online (Sandbox Code Playgroud) 当此对象通过其中一个属性引用自身时,从带有插槽的类中拾取对象的正确方法是什么?这是一个简单的例子,我目前的实现,我不确定是100%正确:
import weakref
import pickle
class my_class(object):
__slots__ = ('an_int', 'ref_to_self', '__weakref__')
def __init__(self):
self.an_int = 42
self.ref_to_self = weakref.WeakKeyDictionary({self: 1})
# How to best write __getstate__ and __setstate__?
def __getstate__(self):
obj_slot_values = dict((k, getattr(self, k)) for k in self.__slots__)
# Conversion to a usual dictionary:
obj_slot_values['ref_to_self'] = dict(obj_slot_values['ref_to_self'])
# Unpicklable weakref object:
del obj_slot_values['__weakref__']
return obj_slot_values
def __setstate__(self, data_dict):
# print data_dict
for (name, value) in data_dict.iteritems():
setattr(self, name, value)
# Conversion of the dict back to a WeakKeyDictionary: …
Run Code Online (Sandbox Code Playgroud) 它决定除去直接支持__slots__
从数据类为Python 3.7。
尽管如此,__slots__
仍可以与数据类一起使用:
from dataclasses import dataclass
@dataclass
class C():
__slots__ = "x"
x: int
Run Code Online (Sandbox Code Playgroud)
但是,由于这种方式__slots__
有效,因此无法为数据类字段分配默认值:
from dataclasses import dataclass
@dataclass
class C():
__slots__ = "x"
x: int = 1
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'x' in __slots__ conflicts with class variable
Run Code Online (Sandbox Code Playgroud)
如何__slots__
与默认dataclass
字段一起使用?
我有一个没有shadow dom 的html web 组件,我尝试添加一个插槽。由于某种原因它不起作用。
我希望它将“Foo bar”切换为“Hello world”,但这并没有发生。
class HelloWorld extends HTMLElement {
constructor() {
super();
}
connectedCallback() {
this.innerHTML = `
<div>
<slot name="element-name">Foo Bar</slot>
</div>
`;
}
}
customElements.define("hello-world", HelloWorld);
Run Code Online (Sandbox Code Playgroud)
<hello-world>
<span slot="element-name">Hello World</span>
</hello-world>
Run Code Online (Sandbox Code Playgroud)
slots ×10
python ×7
descriptor ×2
pickle ×2
python-3.x ×2
class ×1
clos ×1
common-lisp ×1
components ×1
datatable ×1
inheritance ×1
javascript ×1
lispworks ×1
python-c-api ×1
slot ×1
vue.js ×1
vuetify.js ×1