Как Вы знаете при рассмотрении списка атрибутов и методов, перечисленных в dir, которые являются атрибутами и которые являются методами?

Величественный имеет справедливо включенную конфигурацию. iOS и Macos совместно используют весь тот же код.

Для структурирования проекта существует commonMain, nativeCommonMain зависит от этого, и на самом деле appleMain, который зависит от nativeCommonMain.

commonMain {
    dependencies {
        implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
    }
}

jvmMain {
    dependsOn commonMain
    dependencies {
        implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    }
}

nativeCommonMain {
    dependsOn commonMain
}

appleMain {
    dependsOn nativeCommonMain
}

configure([iosX64Main, iosArm64Main, macosMain, iosArm32Main]) {
    dependsOn appleMain
}

, Что структура, вероятно, глубже, чем Вы, нуждаются, но нам было нужно что-то для Linux и окон, который отличался. Ответу Egor выше легче следовать, я думаю.

Мы на самом деле определяем многоплатформенную атомную энергетику в Величественном, таким образом, можно использовать их в качестве вдохновения или на самом деле просто пользоваться самой библиотекой.

https://github.com/touchlab/Stately

, Распространенный

expect class AtomicInt(initialValue: Int) {
  fun get(): Int
  fun set(newValue: Int)
  fun incrementAndGet(): Int
  fun decrementAndGet(): Int

  fun addAndGet(delta: Int): Int
  fun compareAndSet(expected: Int, new: Int): Boolean
}

Собственный компонент JVM

actual typealias AtomicInt = AtomicInteger

actual class AtomicInt actual constructor(initialValue:Int){
  private val atom = AtomicInt(initialValue)

  actual fun get(): Int = atom.value

  actual fun set(newValue: Int) {
    atom.value = newValue
  }

  actual fun incrementAndGet(): Int = atom.addAndGet(1)

  actual fun decrementAndGet(): Int = atom.addAndGet(-1)

  actual fun addAndGet(delta: Int): Int = atom.addAndGet(delta)

  actual fun compareAndSet(expected: Int, new: Int): Boolean = atom.compareAndSet(expected, new)

}

5
задан Nicolas Dumazet 5 June 2009 в 07:28
поделиться

6 ответов

Вместо: « напечатайте hasattr (d1 , каждый) ", попробуйте:" напечатайте каждое, введите (getattr (d1, each)) ". Вы должны найти результаты информативными.

Кроме того, вместо dir () попробуйте help () , который, я думаю, вы действительно ищете.

8
ответ дан 18 December 2019 в 09:10
поделиться

which tells me strictly speaking that all methods are attributes. but I can't call a method without the () so it seems to me that the hasattr() is misleading.

Why is it misleading? If obj.ban() is a method, then obj.ban is the corresponding attribute. You can have code like this:

print obj.getValue()

or

get = obj.getValue
print get()

If you want to get a list of methods on an object, you can try this function. It's not perfect, since it will also trigger for callable attributes that aren't methods, but for 99% of cases should be good enough:

def methods(obj):
    attrs = (getattr(obj, n) for n in dir(obj))
    return [a for a in attrs if a.hasattr("__call__")]
2
ответ дан 18 December 2019 в 09:10
поделиться

В идеале, при использовании сложной библиотеки, такой как BeautifulSoup, вы должны проконсультироваться с ее документацией, чтобы посмотреть, какие методы предоставляет каждый класс. Однако в редких случаях, когда у вас нет легкодоступной документации, вы можете проверить наличие методов, используя следующее.

Все методы, которые сами по себе являются объектами, реализуют метод __ call __ и могут быть проверены с помощью метода callable (), который возвращает True , если проверяемое значение имеет __ вызов метода __ .

Следующий код должен работать.

x = Die()
x.roll()

for attribute in dir(x) :
    print attribute, callable(getattr(x, attribute))

Приведенный выше код вернет истину для всех методов и ложь для всех невызываемых атрибутов (таких как элементы данных, такие как ban). Тем не мение, этот метод также возвращает True для любых вызываемых объектов (например, внутренних классов). вы также можете проверить, является ли тип атрибута instancemethod

1
ответ дан 18 December 2019 в 09:10
поделиться

Есть встроенный метод callable. Вы можете применить его к любому объекту, и он вернет True / False в зависимости от того, можно ли его вызвать. например

>>> def foo():
...   print "This is the only function now"
...
>>> localDictionary = dir()
>>> for item in localDictionary:
...   print repr(item) + "is callable: " + str(callable(locals()[item]))
'__builtins__'is callable: False
'__doc__'is callable: False
'__name__'is callable: False
'foo'is callable: True

Обратите внимание, что вызов locals () вернет словарь, содержащий все, что определено в вашей текущей области. Я сделал это, потому что элементы из словаря - это просто строки, и нам нужно запустить вызываемый объект на реальном объекте.

1
ответ дан 18 December 2019 в 09:10
поделиться

Рассмотрите возможность использования модуля стандартной библиотеки inspect - часто это самый удобный подход к самоанализу, объединяющий значительные фрагменты функциональности (вы можете реализовать это с нуля, но хорошо использовать повторно) -проверенный, хорошо разработанный код - это хорошо). См. Все подробности в http://docs.python.org/library/inspect.html , но, например, inspect.getmembers (foo, inspect.ismethod) - отличный способ чтобы получить все методы foo (вы получите (имя, значение) пар, отсортированных по имени).

4
ответ дан 18 December 2019 в 09:10
поделиться

This info module inspired from Dive into Python serves the purpose.

def info(obj, spacing=20, collapse=1, variables=False):
    '''Print methods and their doc Strings

    Takes any object'''
    if variables:
    methodList = [method for method in dir(obj)]
    else:
    methodList = [method for method in dir(obj) if callable(getattr(obj,method))]

    #print methodList


    print '\n'.join(['%s %s' %
            (method.ljust(spacing),
             " ".join(str(getattr(obj,method).__doc__).split()))
            for method in methodList])


if __name__=='__main__':
    info(list)
2
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: