В Windows вы можете использовать модуль 'win32console' (доступный в некоторых дистрибутивах Python) или модуль 'ctypes' (Python 2.5 и выше) для доступа к Win32 API.
Чтобы увидеть полный код, который поддерживает оба способа, см. Код сообщения о консоли цвета из Testoob .
Пример ctypes:
import ctypes
# Constants from the Windows API
STD_OUTPUT_HANDLE = -11
FOREGROUND_RED = 0x0004 # text color contains red.
def get_csbi_attributes(handle):
# Based on IPython's winconsole.py, written by Alexander Belchenko
import struct
csbi = ctypes.create_string_buffer(22)
res = ctypes.windll.kernel32.GetConsoleScreenBufferInfo(handle, csbi)
assert res
(bufx, bufy, curx, cury, wattr,
left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw)
return wattr
handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
reset = get_csbi_attributes(handle)
ctypes.windll.kernel32.SetConsoleTextAttribute(handle, FOREGROUND_RED)
print "Cherry on top"
ctypes.windll.kernel32.SetConsoleTextAttribute(handle, reset)
вы используете статический конструктор, например:
public class Foo
{
static Foo()
{
// inits
}
}
Вот дополнительная информация .
Итог: это конструктор без параметров с прикрепленным к нему ключевым словом static
. Работает так же, как статический блок в Java.
Edit: Еще одна вещь, о которой стоит упомянуть. Если вы просто хотите построить что-то статически, вы можете статически инициализировать переменную без использования статического конструктора. Например:
public class Foo
{
public static Bar StaticBar = new Bar();
}
Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать какие-либо методы на Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init ()
, по-прежнему требуется статический конструктор. Я просто говорю, что ты не ограничен, вот и все. :)
Итог: это конструктор без параметров с привязанным к нему ключевым словом static
. Работает так же, как статический блок в Java.
Edit: Еще одна вещь, о которой стоит упомянуть. Если вы просто хотите построить что-то статически, вы можете статически инициализировать переменную без использования статического конструктора. Например:
public class Foo
{
public static Bar StaticBar = new Bar();
}
Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать какие-либо методы на Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init ()
, по-прежнему требуется статический конструктор. Я просто говорю, что ты не ограничен, вот и все. :)
Итог: это конструктор без параметров с прикрепленным к нему ключевым словом static
. Работает так же, как статический блок в Java.
Edit: Еще одна вещь, о которой стоит упомянуть. Если вы просто хотите построить что-то статически, вы можете статически инициализировать переменную без использования статического конструктора. Например:
public class Foo
{
public static Bar StaticBar = new Bar();
}
Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать какие-либо методы на Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init ()
, по-прежнему требуется статический конструктор. Я просто говорю, что ты не ограничен, вот и все. :)
public class Foo
{
public static Bar StaticBar = new Bar();
}
Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать какие-либо методы на Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init ()
, по-прежнему требуется статический конструктор. Я просто говорю, что ты не ограничен, вот и все. :)
public class Foo
{
public static Bar StaticBar = new Bar();
}
Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать какие-либо методы на Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init ()
, по-прежнему требуется статический конструктор. Я просто говорю, что ты не ограничен, вот и все. :)
Статический по-прежнему является ключевым словом в C #:
public class Foo {
public static Foo DefaultFoo;
static Foo {
DefaultFoo = new Foo();
// initialize
DefaultFoo.init();
}
public Foo() {
}
void init() {
// initialize
}
}