相关疑难解决方法(0)

Python只读属性

我不知道什么时候属性应该是私有的,如果我应该使用属性.

我最近读到,setter和getter不是pythonic,我应该使用属性装饰器.没关系.

但是,如果我有属性,那么不能从类外部设置但可以读取(只读属性).这个属性应该是私有的,私有的我是指下划线,就像那样self._x?如果是,那么如何在不使用getter的情况下阅读它?我现在唯一知道的方法是写

@property
def x(self):
    return self._x
Run Code Online (Sandbox Code Playgroud)

这样我可以读取属性obj.x但我无法设置它obj.x = 1所以它没关系.

但是我真的应该关心设置不能设置的对象吗?也许我应该离开它.但是我再也不能使用下划线,因为obj._x用户读取很奇怪,所以我应该使用obj.x然后再次用户不知道他不能设置这个属性.

你有什么看法和实践?

python properties private readonly python-2.7

74
推荐指数
4
解决办法
8万
查看次数

Python:如何从'frame'对象中检索类信息?

是否可以从框架对象中检索任何类信息?我知道如何获取文件(frame.f_code.co_filename),函数(frame.f_code.co_name)和行号(frame.f_lineno),但希望能够获取活动对象的类的名称框架的实例(如果不在实例中,则为None).

python introspection

17
推荐指数
3
解决办法
1万
查看次数

获取调用方法的类名

我知道如何获取调用方法名称(从这里:如何在被调用的方法中获取调用方的方法名称?)

import sys
print sys._getframe().f_back.f_code.co_name
Run Code Online (Sandbox Code Playgroud)

我想得到的是这个方法所属的类名(假设它在类中).因此,如果:

def get_some_info():
    print('Class name of caller:', XXX)

class Base:
     def my_method(self):
         get_some_info()

class A(Base):
     pass

class B(Base):
     pass

a = A()
b = B()
a.my_method()
b.my_method()
Run Code Online (Sandbox Code Playgroud)

应该返回:

 ... A
 ... B
Run Code Online (Sandbox Code Playgroud)

我该怎么办xxx

我试过(使用信息_getframe)做类似的事情:

 sys._getframe().f_back.f_code.__self__
Run Code Online (Sandbox Code Playgroud)

但它不起作用

更新:

我不能将类名传递给被调用的函数(否则这很容易,但感谢所有提出此解决方案的人!)

python python-3.x

5
推荐指数
2
解决办法
1040
查看次数

在 Python 中获取调用者类

我有一个类调用另一个类的函数,如下所示:

self.pool.get('some_value')
Run Code Online (Sandbox Code Playgroud)

如何在 get 函数中获取调用者类?

之前谢谢,

python openerp

2
推荐指数
1
解决办法
1070
查看次数