有一个像这样的简单Python类:
class Spam(object):
__init__(self, description, value):
self.description = description
self.value = value
我想检查以下约束:
我应该:
1.在创建垃圾邮件对象之前验证数据吗?
2.检查__init__
方法上的数据?
3.is_valid
在Spam类上创建一个方法,并使用spam.isValid()进行调用?
4.is_valid
在Spam类上创建一个静态方法,并使用Spam.isValid(description,value)进行调用?
5.检查二传手声明中的数据?
6.等
您能推荐一个设计良好/ Pythonic /不冗长(在具有许多属性的类上)/优雅的方法吗?
您可以使用Python属性将规则明确地分别应用于每个字段,并且即使客户端代码尝试更改该字段也可以强制执行这些规则:
class Spam(object):
def __init__(self, description, value):
self.description = description
self.value = value
@property
def description(self):
return self._description
@description.setter
def description(self, d):
if not d: raise Exception("description cannot be empty")
self._description = d
@property
def value(self):
return self._value
@value.setter
def value(self, v):
if not (v > 0): raise Exception("value must be greater than zero")
self._value = v
任何违反规则的尝试都将引发异常,即使是在__init__
函数中,在这种情况下,对象构造也会失败。
更新: 从2010年到现在,我了解到operator.attrgetter
:
import operator
class Spam(object):
def __init__(self, description, value):
self.description = description
self.value = value
description = property(operator.attrgetter('_description'))
@description.setter
def description(self, d):
if not d: raise Exception("description cannot be empty")
self._description = d
value = property(operator.attrgetter('_value'))
@value.setter
def value(self, v):
if not (v > 0): raise Exception("value must be greater than zero")
self._value = v
问题内容: 我的项目使用Node.js和Express,但问题在于通用方法。 我们的用户全部来自FB,除FB外,我们没有其他任何身份验证。我们需要将某些操作与特定的FB用户相关联,还需要他们的令牌才能与FB通信。 目前, 我们这样做: 用户来到页面 有一些 看不见的 块:一个带有占位符,用于存储用户的化身和姓名(“已登录”),另一个带有用于触发FB登录的按钮(“已退出”) 使用FB JS SDK,
由于Python是动态语言,根据类创建的实例可以任意绑定属性。 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.score = 90 但是,如果Student类本身需要绑定一个属性呢?可
也许我错过了什么,如果是这样原谅我的无知。 在这里,我们有什么: 我们在Kafka集群中使用TLS身份验证侦听器(这可以更改,我们可以添加新类型的侦听器) 当从Java代码连接到Kafka主题时,我使用为Kafka用户生成的SSL证书 如果我决定避免使用SSL证书,原因有两个: < li >我将仅从受信任的OpenShift cluster PODs连接到Kafka主题 < li >为了避免在生产
主要内容:类变量(类属性),实例变量(实例属性),局部变量无论是类属性还是类方法,都无法像普通变量或者函数那样,在类的外部直接使用它们。我们可以将类看做一个独立的空间,则类属性其实就是在类体中定义的变量,类方法是在类体中定义的函数。 前面章节提到过,在类体中,根据变量定义的位置不同,以及定义的方式不同,类属性又可细分为以下 3 种类型: 类体中、所有函数之外:此范围定义的变量,称为类属性或类变量; 类体中,所有函数内部:以“self.变量名”的方式定义的
问题内容: 我是python的新手,了解到类属性就像C ++中的静态数据成员一样。但是,尝试以下代码后,我感到困惑: f2.a是否也等于5? 如果将a定义为列表而不是整数,则预期行为: 我研究了 Python:类和实例属性之间的区别,但是它不能回答我的问题。 谁能解释为什么会有所不同?谢谢 问题答案: 在第二个示例中,您没有做相同的事情。在第一个示例中,您要分配一个新值: 在第二个示例中,您只是在
我需要构建一个Weka分类器,然后使用它来预测未来的实例。这里有一个很好的入门来源。不幸的是,我注意到未来的实例不需要与源训练数据的格式匹配。 如何利用训练数据和新实例之间的这种差异进行预测? 示例火车: @关系列车 @属性A1{e,f,g} @属性A2数值 @属性A3数值 @属性A4{正,负} @数据 e,-100,100,阳性 f,-10,10,阳性 g,-90,90,阴性 示例测试: @关系