Việc sử dụng tên tệp được liên kết với một lớp cụ thể là gì? Ví dụ:Sử dụng tên kiểu lớp trong python
Point = namedtuple('P', ['x', 'y'])
Bạn thường sử dụng tên tệp 'P' ở đâu?
Cảm ơn bạn!
Việc sử dụng tên tệp được liên kết với một lớp cụ thể là gì? Ví dụ:Sử dụng tên kiểu lớp trong python
Point = namedtuple('P', ['x', 'y'])
Bạn thường sử dụng tên tệp 'P' ở đâu?
Cảm ơn bạn!
Chỉ vì lợi ích của sự tỉnh táo của, đối số đầu tiên để namedtuple nên được giống như tên biến bạn gán nó vào:
>>> from collections import namedtuple
>>> Point = namedtuple('P','x y')
>>> pp = Point(1,2)
>>> type(pp)
<class '__main__.P'>
isinstance là không quá quan tâm về vấn đề này, mặc dù 'P' là chỉ là những gì không biết:
>>> isinstance(pp,Point)
True
>>> isinstance(pp,P)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'P' is not defined
Nhưng dưa là một trong những mô-đun mà quan tâm đến việc tìm kiếm các classname phù hợp với typename:
>>> import pickle
>>> ppp = pickle.dumps(pp)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python26\lib\pickle.py", line 1366, in dumps
Pickler(file, protocol).dump(obj)
File "c:\python26\lib\pickle.py", line 224, in dump
self.save(obj)
File "c:\python26\lib\pickle.py", line 331, in save
self.save_reduce(obj=obj, *rv)
File "c:\python26\lib\pickle.py", line 401, in save_reduce
save(args)
File "c:\python26\lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "c:\python26\lib\pickle.py", line 562, in save_tuple
save(element)
File "c:\python26\lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "c:\python26\lib\pickle.py", line 748, in save_global
(obj, module, name))
pickle.PicklingError: Can't pickle <class '__main__.P'>: it's not found as __main__.P
Nếu tôi xác định namedtuple là 'điểm', sau đó dưa là hạnh phúc:
>>> Point = namedtuple('Point','x y')
>>> pp = Point(1,2)
>>> ppp = pickle.dumps(pp)
>>>
Thật không may, đó là tùy thuộc vào bạn để quản lý thống nhất này. Không có cách nào để đặt tên để biết những gì bạn đang gán đầu ra của nó, vì gán là một câu lệnh chứ không phải một toán tử trong Python, vì vậy bạn phải chuyển tên lớp đúng vào têntuple, và gán lớp kết quả cho một biến giống nhau Tên.
bạn không cần' .split() 'trên tên trường, đó là [được thực hiện tự động] (http://docs.python.org/library/collections#collections.namedtuple) nếu bạn chỉ định tên dưới dạng một chuỗi. nếu không +1 – mata
Ah, cảm ơn! Tôi đã không sử dụng têntuple trong một thời gian, chỉ là bắt chước định dạng của OP. Tôi làm một cái gì đó rất giống với chức năng 'oneOf' của pyparsing. – PaulMcG
Cũng có 'repr' mặc định: bạn muốn' Point (x = 1, y = 2) ', không phải' P (x = 1, y = 2) '. –
bản sao có thể có của [Tuples được đặt tên là gì "bằng Python?] (Http://stackoverflow.com/questions/2970608/what-are-named-tuples-in-python) – b4hand