【发布时间】:2020-06-22 14:15:08
【问题描述】:
我正在构建一个简单的类,它有一些只属于一个实例的变量,例如一个带有纪元时间戳的“created”字段,以及在创建实例时设置的一些其他变量。作为练习,希望以 most 可能的 Python 方式来完成此操作。此外,我想要一个将属性打印为 json 的函数,以便以后使用。到目前为止,我有这个:
import os
import uuid
import time
class Example:
def __init__(self, data=None):
self._data = data
self._id = self.id
self._environment = self.environment
self._created = self.created
@property
def data(self):
if self.environment == 'prd':
self._data
else:
return None
@data.setter
def data(self, value):
self._data = value
@property
def id(self):
return str(uuid.uuid4())
@id.setter
def id(self, value):
self._id = value
@property
def request(self):
return self._request
@request.setter
def request(self, value):
self._request = value
@property
def environment(self):
return os.getenv('environment', 'dev')
@environment.setter
def environment(self, value):
self._environment = value
@property
def created(self):
return str(int(time.time()))
@created.setter
def created(self, value):
self._created = value
def to_json(self):
return self.__dict__
输出:
from example import Example
e = Example()
print(e.to_json())
# {'_data': None, '_id': '5f946b10-0e89-4d65-9f76-b9f15a81197d', '_environment': 'dev', '_created': '1592835056'}
我有一些疑问:
- 操作属性的最佳位置是什么?例如,我在调用 self.created 时返回一个时间戳。我根据另一个属性操作数据属性。吸气剂是这类东西的正确位置吗?
- 我是否在 init 中正确地将私有变量分配给自己?
- 我需要 json 中的所有变量以供以后处理,如何在 json 中输出它们没有它们带有下划线?
- 如何使用数据类完成同样的事情?
【问题讨论】:
-
您的代码不起作用。您缺少一些变量 (
self.id&self.created)。你能解决这个问题吗? -
这也可能是在代码审查堆栈交换中提出的一个好问题。
标签: python getter-setter