Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >设置类变量值,类方法返回的值。

设置类变量值,类方法返回的值。
EN

Stack Overflow用户
提问于 2018-02-12 06:22:03
回答 2查看 332关注 0票数 0

我正在尝试创建一个类,它映射到一个mongoDB集合。

我的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Collection:
    _collection = get_collection()  # This seems not working

    @classmethod
    def get_collection(cls):
        collection_name = cls.Meta.collection_name if cls.Meta.collection_name \
        else cls.__name__.lower()
        collection = get_collection_by_name(collection_name) # Pseudo code, please ignore
        return collection

    class Meta:
        collection_name = 'my_collection'

我遇到了一种情况,需要为类变量_collection分配get_collection的返回值。我也尝试过_collection = Collection.get_collection(),它似乎也不起作用。

作为一个解决方案,我在子类中子类Collection并设置了_collection的值.

想知道这方面的任何简单解决方案。

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-12 06:45:53

正如DeepSpace所提到的,在这里:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Collection:
    _collection = get_collection()  # This seems not working

    @classmethod
    def get_collection(cls):
        # code that depends on `cls`

调用get_collection方法时尚未定义它。但是在方法定义之后移动这一行也不起作用,因为方法依赖于Collection类(作为cls传递给方法),它本身不会在class Collection:语句的正文结束之前定义。

这里的解决方案是等到定义了类来设置这个属性。由于它看起来像是要子类的基类,更好的解决方案是使用元类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class CollectionType(type):
    def __init__(cls, name, bases, attrs):
        super(CollectionType, cls).__init__(name, bases, attrs)
        cls._collection = cls.get_collection()


# py3
class Collection(metaclass=CollectionType):
    # your code here


# py2.7
class Collection(object):
    __metaclass__ = CollectionType
    # your code here

但是,请注意,如果Collection实际上继承了另一个已经具有自定义元类(即Django、Model类或等效类)的类,则需要使CollectionType成为该元类的子类,而不是type的子类。

票数 2
EN

Stack Overflow用户

发布于 2018-02-12 06:25:26

代码中存在一些设计/语法错误。

  • 当行_collection = get_collection()执行时,还没有定义get_collection。事实上,还没有定义整个Collection类。
  • get_collection_by_name在任何地方都没有定义。

编辑 OP更新了这个问题,因此以下几点可能不再相关。

  • collection = get_collection(collection_name)应该是 collection = cls.get_collection(collection_name)
  • 有时您将参数传递给get_collection,有时则不传递,但是get_collection的签名从不接受参数。
  • 调用get_collection将导致无限递归。

你必须退一步,重新考虑你的班级的设计。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48748617

复制
相关文章
等价类方法和边界值分析方法
NextDate是一个有三个变量(月份、日期和年)的函数。函数返回输入日期后面的那个日期。变量月份、日期和年都是整数值,并满足以下条件:
week
2018/08/27
1.3K0
PyQt5 技巧篇-增加一个类级变量,类级变量的设置方法,类级"常量"设置方法
如果想增加一个全局变量来用的话,请看这篇文章: Python全局变量引用设置方法
小蓝枣
2020/09/22
8310
PyQt5 技巧篇-增加一个类级变量,类级变量的设置方法,类级“常量“设置方法
如果想增加一个全局变量来用的话,请看这篇文章: Python全局变量引用设置方法
小蓝枣
2022/05/07
980
软件测试方法 -- 等价类边界值
测试用例是为了特定的目的而设计的一组测试输入、执行条件和预期的结果,以便测试是否满足某个特定需求。通过大量的测试用例来检验软件的运行效果,他是指导测试工作进行的依据。
EXI-小洲
2022/12/13
8520
软件测试方法 -- 等价类边界值
构造方法、类方法、类的复合
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/46794991
用户1451823
2018/09/12
1.2K0
python中类的静态方法和类的类方法
类的静态方法,不需要self这类参数,因为类的静态方法,不需要进行实例化,就可以进行调用。
刘金玉编程
2019/08/30
3.2K0
IDEA 设置类和方法注释模板
File -> Settings -> Editor -> File and Code Templates
Remember_Ray
2020/03/08
6380
IDEA 设置类和方法注释模板
File -> Settings -> Editor -> File and Code Templates
Remember_Ray
2020/03/09
2.6K0
calendar类的方法_unsafe类常用方法
java.util.Claendar日历类,抽象类,在Date类后出现的,替换掉了很多Date类中的方法,该类将所有的可能用到的时间信息封装为静态成员变量,通过类名.静态成员变量获取时间字段值
全栈程序员站长
2022/11/09
7270
controller方法的返回值
需要方法结束时,定义ModelAndView,将model和view分别进行设置。
用户10325771
2023/03/14
2K0
controller方法的返回值
PHP方法的返回值
不仅是PHP,大部分编程语言的函数或者叫方法,都可以用return来定义方法的返回值。从函数这个叫法来看,本身它就是一个计算操作,因此,计算总会有个结果,如果你在方法体中处理了结果,比如进行了持久化保存,那么这个函数就不用返回任何内容。而计算的结果是要给外部使用的,这时候就要将计算结果进行返回了。
硬核项目经理
2020/02/17
7.7K0
类的封装,类内的方法装饰器,类的方法修改与删除装饰器,经典类和新式类
由于新式类中具有三种访问方式,我们可以根据它们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除
小小咸鱼YwY
2019/07/24
1.2K0
Python中类的静态方法、类方法及实例方法
经过测试可以发现 实例属性需要通过实例对象来访问,类属性通过类来访问,但在测验中 stu1.school 实例对象也能访问类属性,为什么呢?
ZackSock
2021/04/13
3K0
Python中类的静态方法、类方法及实例方法
python类:类方法和静态方法
http://blog.csdn.net/pipisorry/article/details/49516185
用户7886150
2020/12/01
8870
Python中类的静态方法、类方法及实例方法
经过测试可以发现 实例属性需要通过实例对象来访问,类属性通过类来访问,但在测验中 stu1.school 实例对象也能访问类属性,为什么呢?
忆想不到的晖
2021/04/04
2.9K0
Python中类的静态方法、类方法及实例方法
【数据挖掘】聚类算法 简介 ( 基于划分的聚类方法 | 基于层次的聚类方法 | 基于密度的聚类方法 | 基于方格的聚类方法 | 基于模型的聚类方法 )
③ 基于密度的聚类方法 : DBSCAN ( Density-Based Spatial Clustering of Applications with Noise ) ;
韩曙亮
2023/03/27
2.9K0
【数据挖掘】聚类算法 简介 ( 基于划分的聚类方法 | 基于层次的聚类方法 | 基于密度的聚类方法 | 基于方格的聚类方法 | 基于模型的聚类方法 )
IntelliJ IDEA使用(一)基本设置与类、方法模板设置
其实之前一直开发都是在使用的是Eclipse,但是最近在做Maven项目的时候要用IntelliJ IDEA,据说这个idea功能非常的强大,最近在使用的时候发现如果适应的真的是非常的强大。感觉是比E
用户1195962
2018/01/18
3.1K0
IntelliJ IDEA使用(一)基本设置与类、方法模板设置
java之利用反射机制对实体类设置值
今儿在项目,从前台获取到一个实体类 可能由于前台提交表单问题,后台获取的实体类对象含有很多逗号,看项目上处理方法如下:
周杰伦本人
2023/10/12
2310
java之利用反射机制对实体类设置值
整型包装类值的比较
当使用自动装箱方式创建一个Integer对象时,当数值在-128 ~127时,会将创建的 Integer 对象缓存起来,
Vincent-yuan
2021/03/12
9770
整型包装类值的比较
当使用自动装箱方式创建一个Integer对象时,当数值在-128 ~127时,会将创建的 Integer 对象缓存起来,当下次再出现该数值时,直接从缓存中取出对应的Integer对象。所以上述代码中,x和y引用的是相同的Integer对象。
黑洞代码
2021/01/14
1.2K0

相似问题

返回方法值的类

715

从Python类返回所有类变量值

45

在一个类中设置变量值,该值由另一个类中的方法返回

11

类方法返回空值。

11

类方法返回不同的值

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文