python - 如何将实例表示为类型值

标签 python oop

我有两个类:ContainerField 类。我想将 Field 类表示为其包含的值。需要输入它,以便我可以用它进行一些有意义的操作。

import datetime

class Field(object):
    date = datetime.date.today()

    def __repr__(self):
        return self.date

class Container(object):
    value = Field().date
    value_2 = Field()

c = Container()
print c.value.isoformat() # perfect
print c.value_2.isoformat() # boo fails

我知道 SQLAlchemy 做了一些类似的事情。您将属性定义为向您返回类型化值的列实例。

最佳答案

这是 descriptor. 的完美用例基本上定义__get__ Field 类上的方法并从中返回预期值。您还可以定义__set__根据您的要求,例如不允许他们设置其他类型的值。

import datetime


class Field(object):
    def __init__(self):
        self.val = datetime.date.today()

    def __get__(self, instance=None, type=None):
        if instance is not None:
            return self.val
        return self


class Container(object):
    value_1 = Field()
    value_2 = Field()

c = Container()
print c.value_1.isoformat() # 2016-03-03
print c.value_2.isoformat() # 2016-03-03

关于python - 如何将实例表示为类型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35757796/

相关文章:

python - 如何为每隔一行的数据框的浮点索引添加一个值?

python - 要列出的命名元组字符串

javascript - 更改 Javascript 变量的类

python - 如何查找列表中前两个元素的索引,而前两个元素是另一个列表中的任何元素?

python - 如何根据连续行中的字符串填充df中的空白单元格,Pandas

python - 带有缩进的 Pyspark 文本文件 json

java - 如何在 JFrame 中动态重绘 JPanel?

php - 使用 PHP 对象设置递归属性是否安全?

oop - 面向对象的贝叶斯垃圾邮件过滤?

java - 方法链接,从列表返回一个对象并从中获取值