2013-08-14 15 views
6

Buduję rozwiązanie z różnymi klasami i funkcjami, które wymagają dostępu do niektórych globalnych użytkowników, aby móc właściwie pracować. Ponieważ w pythonie nie ma kodu const, co uważasz za najlepszą praktykę, aby ustawić rodzaj globalnych użytkowników?sposób ustawiania globalnych zmiennych stałych w pythonie

global const g = 9.8 

Więc szukam rodzaju powyższego

EDIT: Jak o:

class Const(): 
    @staticmethod 
    def gravity(): 
     return 9.8 

print 'gravity: ', Const.gravity() 

?

+0

nie działa. Każdy może zmienić 'Const.gravity' lub po prostu całkowicie zastąpić klasę' Const'. Brak czegoś takiego jak "const" jest świadomą decyzją projektową; Python bardzo utrudnia wymuszenie, że kod nie dotknie czegoś, czego nie powinien. Zamiast tego, jeśli nie powinno się dotykać czegoś, standardową praktyką jest po prostu nie dotykać. – user2357112

Odpowiedz

8

Nie można definiować stałych w Pythonie. Jeśli znajdziesz jakiś sposób na zrobienie tego, po prostu zmylisz wszystkich.

Aby zrobić coś takiego, zazwyczaj należy po prostu mieć moduł - globals.py np importowanego wszędzie, że trzeba go

+0

Podejrzewałem "Ponieważ nie ma stałej w python":/ – gen

+0

jak nazywasz swoje consts? wszystkie duże litery? lub coś w rodzaju c_gravitation? – gen

+1

PEP 8 mówi [wszystkie czapki z podkreśleniami] (http://www.python.org/dev/peps/pep-0008/#constants). – kindall

6

Ogólne konwencja jest zdefiniowanie zmiennych z kapitału i podkreślenia, a nie ją zmienić. Podobnie jak

GRAVITY = 9.8 

Jednak możliwe jest stworzenie stałych w Pythonie przy użyciu namedtuple

import collections 

Const = collections.namedtuple('Const', 'gravity pi') 
const = Const(9.8, 3.14) 

print(const.gravity) # => 9.8 
# try to change, it gives error 
const.gravity = 9.0 # => AttributeError: can't set attribute 

Dla namedtuple patrz docs here

Powiązane problemy