python - 如何从python中的关联类对象访问方法?
问题描述
我有以下代码:
import datetime
class Notebook:
def __init__(self):
self._id = 0
self.notes = []
def new_note(self, memo, tags=""):
self.notes.append(Note(self, memo, tags)) # creating Note object instance, passing Notebook object
def get_id(self):
id = self._id
self._id += 1
return id
class Note:
def __init__(self, notebook, memo="", tags=""):
self.id = notebook.get_id() # accesing Notebook object's get_id method to set a new unique id for a Note object
self.creation_date = datetime.date.today()
self.tags = tags
self.memo = memo
def __repr__(self):
return f"[{self.id}, {self.creation_date}, {self.tags}, {self.memo}]"
n = Notebook()
n.new_note("Lorem ipsum", "Latin")
print(n.notes)
这是我在一本关于 OOP 的书之后创建的练习代码。如您所见,我必须(据我所知)在创建期间将 Notebook 对象传递给 Note 对象,以便能够从创建它的 Notebook 对象中获取我的新 Note 对象的 get_id。
有更好的方法吗?是否有另一种方法可以在不传递整个对象的情况下从创建者类访问属性?以这种方式传递对象是否有必要是一件坏事?
主要问题是如何从 Notebook 对象的 self.notes 属性中包含的 Note 对象中使用 Notebook 对象的 get_id 方法,但不传递整个 Notebook 对象,如示例所示。
谢谢!
解决方案
这是不可能的,而且有充分的理由。想象一下,您的班级接受了用户在创建时指定注释的类型以允许修改,或者从注释中运行一些用户指定的代码。我可以创建一个MyNote
类来替换new_note
记录用户所做的所有新笔记的方法。那将是有问题的。
显然,这不是问题,因为您有这个硬编码,但是在允许用户指定的更安全和动态的环境中,伪装良好的恶意类可以访问创建它的安全类。例如,如果您的银行决定使用一个创建加载条的模块,它应该无法查看实例化它的类。
当然,在真正安全的情况下,无论如何,所有代码都在您的控制之下。
推荐阅读
- java - 你能解释一下为什么第一个展开的方法引用不能编译吗?
- anaconda - 崇高的文字 3 ; 康达环境
- r - 如何将变量作为 SQL Server 2016 R 服务的输出返回?
- sql - 从多个表中选择,消除重复值
- ios - Swift Firebase - 如何验证“PhoneAuthCredential”并保持用户当前使用他们当前的电子邮件 uid 登录
- amazon-web-services - 将数据传输到 Amazon Workspaces
- pandas - Pandas groupby agg/apply 对组中的不同行具有不同的功能
- javascript - 动画只有一个 div 不是全部
- microsoft-graph-api - AAD 服务主体作为组所有者
- azure-active-directory - 无法使用用户名和密码获取 Microsoft Graph API OAuth 2.0 的 access_token