Hướng dẫn how do you set a method attribute in python? - làm thế nào để bạn đặt một thuộc tính phương thức trong python?

Tôi tự hỏi liệu có thể sử dụng SetAttr để đặt thuộc tính thành một phương thức trong một lớp như vậy bởi vì khi tôi thử tôi sẽ gặp lỗi sẽ được hiển thị sau mã:

class Test:
    def getString(self, var):
        setattr(self.getString, "string", var)
        return self.getString
test = Test()
test.getString("myString").string

Lỗi nào AttributeError: 'method' object has no attribute 'string' vì vậy tôi đã thử nó mà không đặt .string và chỉ thử test.getString("myString") cùng một lỗi, nhưng sau đó tôi đã thử nó mà không cần sử dụng lớp như thế này

def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string

Nó đã trả lại "MyString" như tôi muốn nó, vậy làm thế nào tôi sẽ làm điều này trong một lớp học và tại sao nó hoạt động bên ngoài một nhưng bên trong một?

Hướng dẫn how do you set a method attribute in python? - làm thế nào để bạn đặt một thuộc tính phương thức trong python?

Đã hỏi ngày 30 tháng 11 năm 2013 lúc 21:14Nov 30, 2013 at 21:14

Hướng dẫn how do you set a method attribute in python? - làm thế nào để bạn đặt một thuộc tính phương thức trong python?

3

type( test.getString )builtins.method và từ các tài liệu (phương pháp),

Vì các thuộc tính phương thức thực sự được lưu trữ trên đối tượng hàm cơ bản (

def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string
0), nên việc thiết lập các thuộc tính phương thức trên các phương thức bị ràng buộc không được phép. Cố gắng đặt một thuộc tính trên một phương thức dẫn đến một
def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string
1 đang được nâng lên.

Có (ít nhất) hai giải pháp có thể tùy thuộc vào hành vi bạn đang tìm kiếm. Một là đặt thuộc tính trên phương thức lớp:

class Test:
    def getString(self, var):
        setattr(Test.getString, "string", var)
        return self.getString

test = Test()
test.getString("myString").string  # > "myString"

test2 = Test()
test2.getString.string # > this is also "myString"

và cái khác là sử dụng các đối tượng chức năng:

class Test:
    class getStringClass:
        def __call__ ( self, var ):
            setattr( self, "string", var )
            return self

    def __init__( self ):
        self.getString = Test.getStringClass( )

test = Test( )
test.getString( "myString" ).string   # > "myString"

test2 = Test()
test2.getString.string  # > this is error, because it does not
                        # have the attribute 'string' yet

Đã trả lời ngày 30 tháng 11 năm 2013 lúc 21:54Nov 30, 2013 at 21:54

behzad.nouribehzad.nouribehzad.nouri

71.2K18 Huy hiệu vàng121 Huy hiệu bạc119 Huy hiệu đồng18 gold badges121 silver badges119 bronze badges

Các chức năng giống như hầu hết các đối tượng khác ở chỗ bạn có thể tự do thêm các thuộc tính cho chúng. Mặt khác, các phương pháp ... Về mặt khái niệm, chúng chỉ là các hàm, nhưng chúng hoạt động hơi khác nhau (Inflicity Pass

def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string
2) và do đó được triển khai với một chút keo dán xung quanh các chức năng.

Mỗi lần

def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string
3 được đánh giá, một đối tượng phương thức (ràng buộc) mới được tạo, đây là một trình bao bọc mỏng xung quanh hàm bên dưới (mà bạn có thể truy cập là
def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string
4). Các đối tượng phương thức này không cho phép thêm các thuộc tính và ngay cả khi chúng đã làm, mã của bạn sẽ không hoạt động vì nó tung hứng nhiều đối tượng phương thức riêng biệt (mặc dù tất cả chúng đều bao bọc cùng một hàm).

Bạn không thể thực hiện công việc này với các phương thức bị ràng buộc. Vì có lẽ bạn muốn chuỗi được gắn vào đối tượng

def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string
5 (gián tiếp, bằng cách được gắn vào phương thức của nó), bạn có thể biến nó thành một thuộc tính của
def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string
5. Bạn thậm chí có thể tạo đối tượng của riêng mình hoạt động như một phương thức nhưng cho phép các thuộc tính (bạn phải thêm rõ ràng vào
def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string
7), nhưng thành thật mà nói, có lẽ có một cách tốt hơn để giữ cho dữ liệu và phương thức tách biệt. Mặt khác, nếu bạn muốn đính kèm thuộc tính này vào hàm cơ bản (điều đó có nghĩa là nó được chia sẻ bởi tất cả các trường hợp
def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string
5), bạn chỉ có thể đặt thuộc tính trên
def getString(var):
    setattr(getString, "string", var)
    return getString

getString("myString").string
4.

Đã trả lời ngày 30 tháng 11 năm 2013 lúc 21:44Nov 30, 2013 at 21:44

1

Vì vậy, tôi đã tìm thấy một cách nhưng đó không thực sự là cách tôi muốn làm điều đó một cách cá nhân. Nếu bất cứ ai tìm thấy một cách khác để thực hiện mã sau, hãy bình luận về cách thực hiện.

class Test:
    def getString(self, string):
        setattr(self,"newString",self)
        self.newString.string = string
    return self.newString

Như tôi đã nói, tôi không cảm thấy mình đã hoàn thành bất cứ điều gì bằng cách làm theo cách đó, nhưng nó hoạt động cho những gì tôi cần và nếu bạn tìm thấy một cách bình luận khác dưới đây.

Đã trả lời ngày 30 tháng 11 năm 2013 lúc 21:52Nov 30, 2013 at 21:52

Hướng dẫn how do you set a method attribute in python? - làm thế nào để bạn đặt một thuộc tính phương thức trong python?

Rulerrulerruler

6031 Huy hiệu vàng9 Huy hiệu bạc17 Huy hiệu đồng1 gold badge9 silver badges17 bronze badges

4

Phương pháp nào được sử dụng để đặt thuộc tính trong Python?

Phương thức python setAttr () được sử dụng để gán thuộc tính đối tượng giá trị của nó.setattr() method is used to assign the object attribute its value.

Các phương thức có thể có các thuộc tính trong Python?

Các phương thức cũng đạt được cú pháp Getter và hiện tại chúng truy cập thuộc tính thông qua từ điển của đối tượng hàm cơ bản.Không thể đặt các thuộc tính trên các phương thức bị ràng buộc hoặc không liên kết, ngoại trừ bằng cách làm như vậy một cách rõ ràng trên đối tượng hàm bên dưới.they currently access the attribute through the dictionary of the underlying function object. It is not possible to set attributes on bound or unbound methods, except by doing so explicitly on the underlying function object.

Phương pháp nào được sử dụng để đặt một thuộc tính của đối tượng?

Phương thức SetAttribution () đặt một giá trị mới thành một thuộc tính.setAttribute() method sets a new value to an attribute.

Làm thế nào để bạn tạo một phương thức trong Python?

Để tạo phương thức làm phương thức lớp, hãy thêm @ClassMethod Decorator trước định nghĩa phương thức và thêm CLS làm tham số đầu tiên vào phương thức.Bộ trang trí @ClassMethod là một công cụ trang trí chức năng tích hợp.Trong Python, chúng tôi sử dụng công cụ trang trí @ClassMethod để khai báo một phương thức làm phương thức lớp.add @classmethod decorator before the method definition, and add cls as the first parameter to the method. The @classmethod decorator is a built-in function decorator. In Python, we use the @classmethod decorator to declare a method as a class method.