IO:: Dir хорош и обеспечивает связанный интерфейс хеша также.
От perldoc:
use IO::Dir;
$d = IO::Dir->new(".");
if (defined $d) {
while (defined($_ = $d->read)) { something($_); }
$d->rewind;
while (defined($_ = $d->read)) { something_else($_); }
undef $d;
}
tie %dir, 'IO::Dir', ".";
foreach (keys %dir) {
print $_, " " , $dir{$_}->size,"\n";
}
Таким образом, Вы могли сделать что-то как:
tie %dir, 'IO::Dir', $directory_name;
my @dirs = keys %dir;
Возможно это?
>>> class BaseClass(object):
... def foo(self):
... return 'foo'
... def bar(self):
... return 'bar'
... def methods_implemented(self):
... """This does work."""
... overriden = []
... for method in ('foo', 'bar'):
... this_method = getattr(self, method)
... base_method = getattr(BaseClass, method)
... if this_method.__func__ is not base_method.__func__:
... overriden.append(method)
... return overriden
...
>>> class SubClass(BaseClass):
... def foo(self):
... return 'override foo'
...
>>> o = SubClass()
>>> o.methods_implemented()
['foo']
Это проверяет, совпадают ли объекты функций, стоящие за связанными методами.
Обратите внимание, что до Python 2.6 атрибут __ func __
был с именем im_func
.
Методы, хотя и вызывают один и тот же объект, НЕ являются одним и тем же объектом. Вы должны проверить, являются ли функции, заключенные в несвязанный метод, одним и тем же объектом.
Здесь я использую 2.6, поэтому я также изменил класс на наследование от объекта.
>>> class BaseClass(object):
... def foo(self):
... return 'foo'
... def bar(self):
... return 'bar'
... def methods_implemented(self):
... """This doesn't work..."""
... overriden = []
... for method in ('foo', 'bar'):
... this_method = getattr(self, method).__func__
... base_method = getattr(BaseClass, method).__func__
... if this_method is base_method:
... overriden.append(method)
... return overriden
...
>>> class SubClass(BaseClass):
... def foo(self):
... return 'override foo'
...
>>> o = SubClass()
>>> o.methods_implemented()
['bar']