作者uranusjr (←这人是超级笨蛋)
看板Python
标题Re: [问题] 迭代物件中的所有非私有方法和栏位?
时间Fri Jun 23 17:09:29 2017
1F:→ uranusjr: __dict__ 06/23 14:57
2F:→ uranusjr: 漏看要对内建型别也有用, 这样 global dir() 比较好 06/23 14:58
: 可是u大 dir後要怎样过滤方法还是属性呢
最正规的答案是没有办法, 因为 Python 没有在分...
假设你有个 class 长这样
class A:
def __init__(self):
self.x = 0
def f(self):
print('hi')
你可能会想说 x 是属性, f 是方法
但事情并没有这麽简单
如果我这样...
class A:
def __init__(self):
self.x = 0
self.y = self.f
def f(self):
print('hi')
那麽 y 是属性吗?但它和 f 的行为完全一样
所以你根本分不出来...
所以你必须想好你真的想要的是什麽
如果你想知道的是「哪些属性可以被呼叫」
那麽你可以用 callable() 函式
>>> a = A()
>>> callable(a.f)
True
>>> callable(a.x)
False
>>> callable(a.y)
True
如果你想知道哪些属性是 function (不包含 class 和有定义 __call__ 的物件)
可以用 inspect.isfunction()
如果你想要知道哪些属性是 method (只包含有 bound 到某个 instance 的 function)
那就用 inspect.ismethod()
还有一些其他微妙差异就交给你自己发现
另外如果你打算用 inspect
可以考虑搭配 inspect.getmembers() 的 predicate 省一些功夫
--
作者 Linux (Windows) 看板 C_and_CPP
标题 [问题] 如何确认是否 free 对记忆体
时间 Fri Nov 2 00:14:03 2012
3F:→ akasan:valgrind, 但 windowns 版的没试过XD 11/02 00:43
4F:→ akasan:linux 上那真的是不二选择了 11/02 00:44
5F:→ Linux:我是用 Windows ....>"< 11/02 00:45
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.161.19.12
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1498208971.A.CE0.html
※ 编辑: uranusjr (218.161.19.12), 06/23/2017 17:10:36
6F:推 LessonWang: 非常感谢u大 被开导了一课xd 06/23 18:34
7F:→ LessonWang: 推详细说明 06/23 18:34