Аналогичное решение для @gcedo , но без необходимости добавления промежуточного содержимого, чтобы подтолкнуть нижний колонтитул. Мы можем просто добавить margin-top:auto
в нижний колонтитул, и он будет сдвинут в нижнюю часть страницы независимо от его высоты или высоты содержимого выше.
body {
display: flex;
flex-direction: column;
min-height: 100vh;
margin:0;
}
.content {
padding: 50px;
background: red;
}
.footer {
margin-top: auto;
padding:10px;
background: green;
}
some content here
Да это, просто используйте название метода, как Вы записали. Методы/функции являются объектами в Python, точно так же, как что-либо еще, и можно передать их вокруг способа, которым Вы делаете переменные. На самом деле можно думать о методе (или функция) как переменная, значение которой является фактическим вызываемым объектом кода.
К вашему сведению, существует нет call
метод - я думаю, что это называют __call__
, но Вы не должны вызывать его явно:
def method1():
return 'hello world'
def method2(methodToRun):
result = methodToRun()
return result
method2(method1)
Если Вы хотели method1
чтобы быть названными с аргументами, затем вещи становятся сложными. method2
должен быть записан с небольшим количеством информации о том, как передать аргументы method1
, и это должно получить значения для тех аргументов от где-нибудь. Например, если method1
как предполагается, берет один аргумент:
def method1(spam):
return 'hello ' + str(spam)
затем Вы могли записать method2
для вызова его с одним аргументом, который передается в:
def method2(methodToRun, spam_value):
return methodToRun(spam_value)
или с аргументом, что это вычисляет себя:
def method2(methodToRun):
spam_value = compute_some_value()
return methodToRun(spam_value)
Можно расшириться, это к другим комбинациям значений передало в и вычисленные значения, как
def method1(spam, ham):
return 'hello ' + str(spam) + ' and ' + str(ham)
def method2(methodToRun, ham_value):
spam_value = compute_some_value()
return methodToRun(spam_value, ham_value)
или даже с аргументами ключевого слова
def method2(methodToRun, ham_value):
spam_value = compute_some_value()
return methodToRun(spam_value, ham=ham_value)
Если Вы не знаете при записи method2
, какие аргументы methodToRun
движение должно взять, можно также использовать распаковку аргумента для вызова его универсальным способом:
def method1(spam, ham):
return 'hello ' + str(spam) + ' and ' + str(ham)
def method2(methodToRun, positional_arguments, keyword_arguments):
return methodToRun(*positional_arguments, **keyword_arguments)
method2(method1, ['spam'], {'ham': 'ham'})
В этом случае positional_arguments
потребности быть списком или кортежем или подобный, и keyword_arguments
dict или подобный. В method2
можно изменить positional_arguments
и keyword_arguments
(например, добавить или удалить определенные аргументы или изменить значения) перед вызовом method1
.
Да это возможно. Просто назовите его:
class Foo(object):
def method1(self):
pass
def method2(self, method):
return method()
foo = Foo()
foo.method2(foo.method1)
Вот Ваш пример, переписанный для показа автономного рабочего примера:
class Test:
def method1(self):
return 'hello world'
def method2(self, methodToRun):
result = methodToRun()
return result
def method3(self):
return self.method2(self.method1)
test = Test()
print test.method3()
Да; функции (и методы) являются объектами первого класса в Python. Следующие работы:
def foo(f):
print "Running parameter f()."
f()
def bar():
print "In bar()."
foo(bar)
Выводы:
Running parameter f().
In bar().
Эти виды вопросов тривиальны для ответа на использование интерпретатора Python или, для большего количества функций, оболочки IPython.
Методы являются объектами как любой другой. Таким образом, можно раздать их, сохранить их в списках и dicts, сделайте то, что Вы любите с ними. Специальная вещь о них, они - вызываемые объекты, таким образом, можно вызвать __call__
на них. __call__
назван автоматически, когда Вы вызываете метод с или без аргументов, таким образом, просто необходимо записать methodToRun()
.