Hướng dẫn how do you restrict data type in python? - làm thế nào để bạn hạn chế kiểu dữ liệu trong python?

I need to accept a number from the user and print the sum. I want the object defined to accept the characters entered by the user to be of integer type only.

I do not want to check the type of the object after the value is entered. I would like a method by which the program doesn't even accept strings or other data types, only integers.

asked May 27, 2019 at 6:55

5

I'm quite sure you'd be fine with

def __setattr__[self,name,value]:
    def setting_atr[name,value]:
        if isinstance[value,[float,int]]:
            if name=='radius' and value=0'],"Attribute 'radius' should be no negative"]
def fun_radius[x]
    return x

Vấn đề nhỏ với phương pháp này là trong bản in lỗi ra ngoài phức tạp hơn và ít thông tin hơn. Lần đầu tiên, thông báo lỗi dẫn đến chức năng tăng lỗi giả, nơi "oops" thực sự chỉ xảy ra trong các dòng thứ hai.

Mục tiêu của tôi là làm cho khả năng nâng cao ngoại lệ từ các hàm Lambda và các dòng mã như đã hiển thị ở trên, để làm cho mã rõ ràng hơn. Để làm điều này, tôi nên tạo lớp ngoại lệ của riêng mình với phương thức cuộc gọi được triển khai. Vấn đề: Lớp kế thừa không nhìn thấy chính nó trong tên riêng, vì vậy phương thức

__call__[self]:
    raise self #yes ha-ha

Cho kết quả:

TypeError: __call__[] missing 1 required positional argument: 'self'

Vì vậy, câu hỏi của tôi rất đơn giản: Có thể làm cho đối tượng lỗi có thể gọi được không? Nếu có, những gì tôi nên đọc, để làm điều đó. Và ngoài ra, nếu ai đó giải quyết vấn đề nhỏ này, tôi sẽ rất vui. P.S. Tôi biết các mẫu [về khai báo biến bán kính] cho thấy ở trên không thể được thực hiện trong lớp "vòng tròn" này. Tôi chỉ cho nó làm ví dụ để thể hiện theo dõi suy nghĩ của tôi. Xin vui lòng, đừng chọn nó.

Lời bạt [của Marat] Cảm ơn rất nhiều người đã viết và bỏ phiếu trong chủ đề này. Sau khi đọc được câu trả lời, tôi đã nghĩ rất lâu và Finaly đã tự nâng mình lên để thêm một số gia tăng cho chủ đề này [ngay cả khi nó gây ra một số rủi ro cho các quy tắc xâm phạm]. Cho lần đầu tiên. Một số người đã viết rằng chúng tôi không cần quan tâm đến các lỗi ở trạng thái tạo đối tượng và thậm chí không cần phải kiểm soát các loại biến [vì nó không được thực hiện trong Python theo mặc định]. Mặc dù tôi đã không có thời gian dài trong lập trình định hướng đối tượng, nhưng trước đó tôi đã [và vẫn có] làm việc trên tính toán một quy trình và thiết bị kỹ thuật. Vì vậy, tôi rất tự tin về những từ này: "Lỗi có thể nên được định vị càng sớm càng tốt [tôi không nói được cải thiện]". Nhiều thuật toán để tính toán một quá trình vật lý thực sử sử dụng các lần lặp và đệ quy, vì vậy nếu bạn trượt ra [đối với xử lý sau này], một số sai lầm đã xảy ra, nó có thể mang lại lỗi khó phát hiện trong kết quả cuối cùng. Vì vậy, có Python, từ quan điểm này. "Gõ vịt" của Python là tuyệt vời để tạo mẫu nhanh và đơn giản hóa lập trình ứng dụng. Nhưng "đánh máy vịt" không phải là một nhu cầu tôn giáo. Tuy nhiên, kiểu chữ không đáng kể của Python, đó không phải là một điều kỳ lạ khi thêm một kiểm soát loại, nếu bạn nghĩ rằng bạn cần điều đó. Nhưng phong cách Python áp đặt để thực hiện nó khác với phong cách trong các ngôn ngữ đánh máy tĩnh như C ++, Java và v.v. Trong Python, chúng ta chỉ có thể kiểm soát đối tượng trong một số "điểm kiểm soát". Điều này hướng dẫn chúng tôi đến các nguyên tắc "lập trình theo định hướng hệ thống" [Therm là của tôi, nhưng tôi không kiểm tra xem nó có tồn tại trên báo chí hay không, vì vậy nó có thể có ý nghĩa khác với cùng một tác giả khác và ý tôi cũng có thể có tên khác ]. Chúng ta nên [nếu sẽ] đặt "các điểm điều khiển" ở đầu vào và đầu ra của các phần tử của hệ thống [chính]. Những gì là cho các yếu tố hệ thống? Nó phải là bất kỳ đối tượng nào có không gian tên riêng và có thể tương tác với chức năng bên ngoài [theo các phương thức cũng]. Phiên bản đơn giản nhất của đầu vào điều khiển phần tử chức năng là: Thank very much who wrote and voted in this topic. After readed answers, I thought very long, and finaly raised myself to add some augment to this topic [even if it entail some risk to infringe rules]. For the first. Some people have wrote that we dont't need care about errors at the object creation state, and even no need to control variable types at all [inasmuch as it no has implemented in python by default]. Although I have been no long time in object oriented programming, before that I had [and still have] been work on calculation a technical processes and devices. So I'm very confident about this words: "Possible error should be localized as soon as possible [I didn't say improved]". Many algorithms for calculation a real physical processes use iterations and recursions so if you slip out [for later handle] some occurred mistake it could brought a hard detectable error in final result. So, there is python, from this point of view. Python's "Duck Typing" is great for quick prototyping and simplifying applied programming. But "Duck Typing" is not a religion demand. Nevertheless Python's unstrict typification it isn't a bizarre thing to add a type control, if you think you need that. But the style which Python impose to perform it differ from the style in the static typification languages as C++, Java and etc. In Python we can control the object only in some "control points". This guide us to the "System Oriented Programming" principles [Therm is mine, but I didn't check if it exist in press, so it may has differ meaning from the same of another authors, and what I mean may also has another name]. We should [if will] set the "control points" at the inlet and outlet of the elements of [main] system. What is for the system elements? It should be any object who has own name space and can interact with outside as function [by methods also]. The simplest version of inlet controlling for function element is:

def func[a,b,c]:
    #just like this
    a=int[a]
    b=str[b]
    c=list[c]

Sự kết hợp và cách tiếp cận thú vị hơn được hiển thị ở đây: Người trang trí kiểm tra loại cho Python 2

Một cách riêng biệt, về phương pháp được đề xuất bởi đồng tác giả của tôi. Trình trang trí "Thuộc tính" sử dụng các phương thức giống như mô tả, vì vậy nó mô phỏng các thuộc tính đối tượng theo các phương thức lớp. Chế độ này nên được sử dụng cẩn thận vì trong Python, các đối tượng của cùng một lớp được chia sẻ không gian tên lớp. Tôi để bản thân viết lại cùng một chương trình đã viết bởi @izkata với

def __setattr__[self,name,value]:
    def setting_atr[name,value]:
        if isinstance[value,[float,int]]:
            if name=='radius' and value

Bài Viết Liên Quan

Chủ Đề