2013-08-14 73 views
6

Tôi đang xây dựng một giải pháp với các lớp và chức năng khác nhau, tất cả đều cần quyền truy cập vào một số người lãnh sự toàn cầu để có thể làm việc một cách thích hợp. Vì không có const trong python, bạn sẽ cân nhắc thực hành tốt nhất nào để thiết lập một loại đối tượng toàn cầu.làm thế nào để thiết lập các biến const toàn cầu trong python

global const g = 9.8 

Vì vậy, tôi đang tìm kiếm một loại của

trên chỉnh sửa: Làm thế nào về:

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

print 'gravity: ', Const.gravity() 

?

+0

Không làm việc. Bất cứ ai cũng có thể thay đổi 'Const.gravity' hoặc chỉ thay thế hoàn toàn lớp' Const'. Việc thiếu bất cứ thứ gì như 'const' là một quyết định thiết kế có chủ ý; Python làm cho nó rất khó khăn để thực thi mã đó sẽ không chạm vào một cái gì đó nó không nên. Thay vào đó, nếu bạn không phải chạm vào một cái gì đó, thực hành tiêu chuẩn là không chạm vào nó. – user2357112

Trả lời

8

Bạn không thể xác định hằng số bằng Python. Nếu bạn tìm thấy một số loại hack để làm điều đó, bạn sẽ chỉ gây nhầm lẫn cho tất cả mọi người.

Để làm điều đó đại loại như vậy, thường bạn chỉ nên có một mô-đun - globals.py ví dụ mà bạn nhập ở khắp mọi nơi mà bạn cần nó

+0

Tôi nghi ngờ "Vì không có const trong python":/ – gen

+0

làm thế nào để bạn đặt tên cho các const của bạn? tất cả các mũ? hoặc một cái gì đó như c_gravitation? – gen

+1

PEP 8 cho biết [tất cả các mũ có dấu gạch dưới] (http://www.python.org/dev/peps/pep-0008/#constants). – kindall

6

ước chung là xác định các biến có vốn đầu và dấu gạch dưới và không thay đổi nó. Giống như,

GRAVITY = 9.8 

Tuy nhiên, nó có thể tạo ra các hằng số bằng Python sử dụng 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 

Đối namedtuple, hãy tham khảo tài liệu here

Các vấn đề liên quan