Hướng dẫn python dynamically add variables to class - python tự động thêm các biến vào lớp

Tôi cần tạo một loạt các biến lớp và tôi muốn thực hiện nó bằng cách lặp qua một danh sách như thế:

vars=['tx','ty','tz'] #plus plenty more

class Foo[]:
    for v in vars:
        setattr[no_idea_what_should_go_here,v,0]

Có thể không? Tôi không muốn làm cho chúng một ví dụ [sử dụng bản thân trong __init__] nhưng là biến lớp.

hỏi ngày 29 tháng 11 năm 2011 lúc 8:11Nov 29, 2011 at 8:11

4

Bạn có thể chạy mã chèn ngay sau khi một lớp được tạo:

class Foo[]:
     ...

vars=['tx', 'ty', 'tz']  # plus plenty more
for v in vars:
    setattr[Foo, v, 0]

Ngoài ra, bạn có thể tự động lưu trữ biến trong khi lớp đang được tạo:

class Bar:
    locals[]['tx'] = 'texas'

Đã trả lời ngày 29 tháng 11 năm 2011 lúc 8:14Nov 29, 2011 at 8:14

Raymond Hettingerraymond HettingerRaymond Hettinger

208K62 Huy hiệu vàng367 Huy hiệu bạc470 Huy hiệu đồng62 gold badges367 silver badges470 bronze badges

3

Cuối bữa tiệc nhưng sử dụng hàm tạo lớp type!

Foo = type["Foo", [], {k: 0 for k in ["tx", "ty", "tz"]}]

Đã trả lời ngày 15 tháng 8 năm 2017 lúc 20:03Aug 15, 2017 at 20:03

Costtrouccostrouccostrouc

2.9372 Huy hiệu vàng18 Huy hiệu bạc22 Huy hiệu đồng2 gold badges18 silver badges22 bronze badges

Nếu vì bất kỳ lý do gì, bạn không thể sử dụng câu trả lời của Raymond về việc thiết lập chúng sau khi tạo lớp thì có lẽ bạn có thể sử dụng Metaclass:

class MetaFoo[type]:
    def __new__[mcs, classname, bases, dictionary]:
        for name in dictionary.get['_extra_vars', []]:
            dictionary[name] = 0
        return type.__new__[mcs, classname, bases, dictionary]

class Foo[]: # For python 3.x use 'class Foo[metaclass=MetaFoo]:'
    __metaclass__=MetaFoo # For Python 2.x only
    _extra_vars = 'tx ty tz'.split[]

Đã trả lời ngày 29 tháng 11 năm 2011 lúc 9:29Nov 29, 2011 at 9:29

DuncanduncanDuncan

88.6K11 Huy hiệu vàng117 Huy hiệu bạc155 Huy hiệu đồng11 gold badges117 silver badges155 bronze badges

2

Phiên bản locals[] không hiệu quả với tôi trong một lớp học.

Có thể được sử dụng sau đây để tạo động các thuộc tính của lớp:

class namePerson:
    def __init__[self, value]:
        exec["self.{} = '{}'".format["name", value]

me = namePerson[value='my name']
me.name # returns 'my name'

double-beep

4.59613 Huy hiệu vàng 30 Huy hiệu bạc40 Huy hiệu đồng13 gold badges30 silver badges40 bronze badges

Đã trả lời ngày 9 tháng 11 năm 2019 lúc 13:02Nov 9, 2019 at 13:02

1

setattr[object, name, value] Đây là đối tác của getattr[]. Các đối số là một đối tượng, một chuỗi và một giá trị tùy ý. Chuỗi có thể đặt tên cho một thuộc tính hiện có hoặc thuộc tính mới. Hàm gán giá trị cho thuộc tính, với điều kiện đối tượng cho phép nó. Ví dụ,

class Foo[]:
     ...

vars=['tx', 'ty', 'tz']  # plus plenty more
for v in vars:
    setattr[Foo, v, 0]
0 tương đương với
class Foo[]:
     ...

vars=['tx', 'ty', 'tz']  # plus plenty more
for v in vars:
    setattr[Foo, v, 0]
1.

Đã trả lời ngày 15 tháng 8 lúc 5:40Aug 15 at 5:40

Afghaniafghaniafghani

691 Huy hiệu bạc5 Huy hiệu đồng1 silver badge5 bronze badges

Là một nhà phát triển Python hoặc là một kỹ sư dữ liệu sử dụng Python trong cuộc sống làm việc hàng ngày của họ, chúng ta có thể sẽ gặp phải một tình huống mà chúng ta cần khai báo và khởi tạo các biến theo một số giá trị đầu vào.

Ví dụ, đây là danh sách các nguồn đã chuyển một đối số cho một số quy trình Python [chức năng hoặc lớp hoặc mô -đun] bởi người dùng hoặc một số quy trình Python khác. Và danh sách này có thể khác nhau bất cứ lúc nào.

Yêu cầu dành cho mọi nguồn trong Source_List, chúng ta cần khai báo một biến theo cách sao cho tên biến phải là _config. [Người ta có thể đạt được yêu cầu này ngay cả khi không khai báo các biến động, nhưng để làm cho kịch bản đơn giản thí dụ :] ]

Hãy xem làm thế nào tất cả chúng ta có thể đạt được điều này.

  1. Sử dụng từ điển [đây có lẽ là cách tiếp cận tốt nhất]: Từ điển sẽ là suy nghĩ đầu tiên cho mọi người. Thêm các biến này làm khóa từ điển và gán nó với các giá trị cần thiết như bên dưới: Dictionary will be the first thought for everyone. Adding these variables as keys of a dictionary and assigning it with required values as below

2. Sử dụng hàm tích hợp toàn cầu [] [Bảng ký hiệu]: Trình thông dịch Python duy trì cấu trúc dữ liệu chứa thông tin về từng định danh xuất hiện trong mã nguồn của chương trình. Thông tin này là về loại, giá trị, mức phạm vi và vị trí của một định danh [còn được gọi là ký hiệu]. Chúng ta có thể gọi chúng là bảng biểu tượngUsing globals[] built-in function [Symbol Table]:Python interpreter maintains a data structure containing information about each identifier appearing in the program's source code. This information is about the type, value, scope level, and location of an identifier [also called symbol]. We can call them as symbol tables

  • Hàm tích hợp toàn cầu [] sẽ trả về bảng biểu tượng toàn cầu làm từ điển. Điều này sẽ chứa tất cả các thuộc tính, hàm, lớp, nhập [và bất kỳ đối tượng nào khác], trong phạm vi toàn cầu của mô -đun tương ứng.

Ví dụ: trong phạm vi kịch bản của chúng tôi:

Nếu bạn khởi tạo num = 1, thì & nbsp; biến 'num' sẽ được lưu trữ dưới dạng globals [] ['num'] = 1

  • Chức năng tích hợp của người dân địa phương [] sẽ trả về bảng biểu tượng cục bộ với các thực thể trong phạm vi cục bộ của một hàm hoặc một lớp.

Ví dụ: trong phạm vi kịch bản của chúng tôi:

Nếu bạn khởi tạo num = 1 toàn cầu và num = 2 cục bộ bên trong một hàm, bảng ký hiệu toàn cầu sẽ lưu trữ như ví dụ trước trong khi bảng biểu tượng cục bộ sẽ lưu trữ dưới dạng người dân địa phương [] ['num'] = 2. Bất cứ điều gì bạn khai báo hoặc nhập với phạm vi của chức năng đó chỉ sẽ được lưu trữ trên bảng biểu tượng của người dân địa phương

Bây giờ chúng ta hãy quay lại kịch bản ban đầu của chúng ta về các biến tự động khai báo. Như chúng ta đã thấy ở trên, các bảng biểu tượng toàn cầu và địa phương là nơi các biến số của phạm vi toàn cầu và địa phương được lưu trữ và truy xuất. Vậy tại sao chúng ta không truy cập trực tiếp vào các cấu trúc dữ liệu này và thêm các biến trực tiếp vào chúng theo kiểu năng động phải không? Nhưng có một điều bắt gặp ở đây rằng việc gán các biến mới trực tiếp cho người dân địa phương [] sẽ không hoạt động bên trong một hàm vì nó hoạt động cho toàn cầu. Vì vậy, nếu bạn dự định sử dụng điều này chỉ để tạo biến động cục bộ, đây không phải là phương pháp cho bạn. Nhưng vâng, trên toàn cầu bạn có thể làm như sau [bạn cần đảm bảo rằng bạn không ghi đè bất kỳ biến toàn cầu nào đã được tải bởi hệ thống hoặc chương trình vô ý.]

3 Điều này có thể được sử dụng để gán động các thuộc tính thể hiện [đây là một cách tiêu chuẩn để xử lý các thuộc tính động nếu bạn ở trong một lớp]. Điều này có thể được thực hiện trong __init__ hoặc trong một phương thức setter khác.Using setattr built-in method: setattr[obj, name, value] will call self.__setattr__ dunder method and will set value assigned to "name" argument as attribute name and value assigned to "value" argument as its original value. This can be utilized for dynamic assignment of instance attributes [This is a standard way of dealing with dynamic attributes if you are inside a class]. This can be implemented either within __init__ or in a different setter method.

  • Đặt các biến thể hiện & nbsp; động từ Source_List tại thời điểm khởi tạo đối tượng

  • Đặt các biến thể hiện bằng cách sử dụng phương thức setter

4. Sử dụng chức năng tích hợp thực thi: Hàm này được sử dụng để thực hiện động của chương trình Python có thể là mã chuỗi hoặc mã đối tượng. Nếu đó là một chuỗi, chuỗi được phân tích cú pháp như một bộ câu lệnh Python sau đó được thực thi trừ khi xảy ra lỗi cú pháp và nếu đó là mã đối tượng, thì nó chỉ được thực thi. Chúng ta phải cẩn thận rằng các câu lệnh hoàn trả có thể không được sử dụng bên ngoài các định nghĩa chức năng thậm chí không trong bối cảnh mã được truyền cho hàm EXEC []. Nó không trả lại bất kỳ giá trị nào, do đó không trả lại. & nbsp; & nbsp; & nbsp;Using exec built-in function : This function is used for the dynamic execution of Python program which can either be a string or object code. If it is a string, the string is parsed as a suite of Python statements which is then executed unless a syntax error occurs and if it is an object code, it is simply executed. We must be careful that the return statements may not be used outside of function definitions not even within the context of code passed to the exec[] function. It doesn’t return any value, hence returns None.    

Ở đây trong kịch bản của chúng tôi, & nbsp; nếu chúng ta cần gán salesforce_config = "một số cấu hình", chúng ta cần chuyển toàn bộ câu lệnh này như một đối số cho Exec []. Vui lòng xem mã và đầu ra dưới đây:

Làm thế nào để bạn tạo ra một biến động động động trong Python?

Các lớp có thể được tạo động bằng cách sử dụng hàm loại [] trong python. Hàm loại [] được sử dụng để trả về loại đối tượng. Cú pháp trên trả về loại đối tượng.using the type[] function in Python. The type[] function is used to return the type of the object. The above syntax returns the type of object.

Làm cách nào để thêm các thuộc tính vào một lớp trong Python?

Thêm các thuộc tính vào một lớp Python rất thẳng về phía trước, bạn chỉ cần sử dụng '.'toán tử sau một phiên bản của lớp với bất kỳ tên tùy ý nào bạn muốn thuộc tính được gọi, theo sau là giá trị của nó.use the '. ' operator after an instance of the class with whatever arbitrary name you want the attribute to be called, followed by its value.

Python có biến động không?

Một tên biến động, đôi khi được gọi là biến, là một biến có tên là ước tính của một biến khác.Mặc dù thực tế là Python là một ngôn ngữ rất năng động, trong đó gần như mọi thứ đều là một đối tượng, có thể xây dựng các biến động trong Python.it is possible to construct dynamic variables in Python.

Làm thế nào để bạn in một biến lớp trong Python?

Làm thế nào để in loại biến trong Python.Để có được loại biến trong Python, bạn có thể sử dụng hàm loại tích hợp [].Trong Python, mọi thứ đều là một đối tượng.Vì vậy, khi bạn sử dụng hàm loại [] để in loại giá trị được lưu trữ trong một biến cho bàn điều khiển, nó sẽ trả về loại lớp của đối tượng.use the built-in type[] function. In Python, everything is an object. So, when you use the type[] function to print the type of the value stored in a variable to the console, it returns the class type of the object.

Bài Viết Liên Quan

Chủ Đề