Hướng dẫn can class method access self in python? - phương thức lớp có thể tự truy cập trong python không?

Trong ví dụ, lớp kiểm tra có hai phương thức thể hiện và một classmethodTest class has two instance method and one classmethod

Trong phương thức set_cls_var_1, tôi đặt biến lớp bằng cách sử dụng bản thân.set_cls_var_1 method I set class variable using self.

Trong phương thức set_cls_var_2, tôi gọi phương thức lớp bằng cách sử dụng bản thân.set_cls_var_2 method I call class method using self.

   class Test[]:

        #class variable
        cls_var = 10

        def __init__[self]:
           obj_var=20

        def set_cls_var_1[self,val]:
            #second method to access class variable
            print "first "
            self.cls_var = val

        def set_cls_var_2[self]:
            print "second"
            self.task[200]

        @classmethod
        def task[cls,val]:
            cls.cls_var = val


t=Test[]

#set class variable by first method
t.set_cls_var_1[100]

print Test.cls_var

#set class variable by second method
t.set_cls_var_2[]

print Test.cls_var

Đầu ra

first 
10
second
200

Đầu ra mong đợi

first 
100
second
200

Câu hỏi của tôi là: Tại sao chỉ có lớp học mới có thể tự gọi, tại sao không biến lớp học

Đã hỏi ngày 15 tháng 7 năm 2017 lúc 18:47Jul 15, 2017 at 18:47

KallzkallzKallz

3.0661 Huy hiệu vàng19 Huy hiệu bạc38 Huy hiệu đồng1 gold badge19 silver badges38 bronze badges

3

Khi bạn cố gắng truy cập thuộc tính của một đối tượng bằng cách sử dụng self, Python trước tiên sẽ tìm kiếm các thuộc tính của đối tượng. Nếu nó không thể tìm thấy nó ở đó, thì việc tìm kiếm các thuộc tính của lớp đối tượng. Đó là những gì đang xảy ra trong trường hợp của bạn;

Python đầu tiên tìm kiếm các thuộc tính của ____ ____ 6. Nó không tìm thấy cls_var, vì vậy sau đó nó tìm kiếm các thuộc tính của lớp ____. Nó tìm thấy cls_var để nó dừng lại và trả về giá trị của ____ 7.

Tuy nhiên, khi gán các thuộc tính cho self, Python luôn gán chúng trực tiếp cho đối tượng và không bao giờ lớp đối tượng trừ khi được bảo rõ ràng là làm như vậy. Đó là lý do tại sao việc khẳng định

first 
10
second
200
2 cho
first 
10
second
200
3 không ảnh hưởng đến ____ 14 ____ của ____7 attrbiute.

Đã trả lời ngày 15 tháng 7 năm 2017 lúc 19:06Jul 15, 2017 at 19:06

Christian Deanchristian Trưởng khoaChristian Dean

21.5K7 Huy hiệu vàng 50 Huy hiệu bạc80 Huy hiệu Đồng7 gold badges50 silver badges80 bronze badges

2

Tôi tìm thấy một cái gì đó khác luôn sử dụng các cách sau để truy cập classmethod hoặc biến trong phương thức ví dụ

class Test[]:
    #class variable
    cls_var = 10

    def __init__[self]:
        obj_var=20

    def set_cls_var_1[self,val]:
        #first method to access class variable
        print "first type"
        cls = self.__class__
        cls.cls_var = val



t=Test[]
#set class variable by first method

t.set_cls_var_1[100]

print Test.cls_var

Đã trả lời ngày 15 tháng 7 năm 2017 lúc 19:15Jul 15, 2017 at 19:15

KallzkallzKallz

3.0661 Huy hiệu vàng19 Huy hiệu bạc38 Huy hiệu đồng1 gold badge19 silver badges38 bronze badges

Khi bạn cố gắng truy cập thuộc tính của một đối tượng bằng cách sử dụng self, Python trước tiên sẽ tìm kiếm các thuộc tính của đối tượng. Nếu nó không thể tìm thấy nó ở đó, thì việc tìm kiếm các thuộc tính của lớp đối tượng. Đó là những gì đang xảy ra trong trường hợp của bạn;

Python đầu tiên tìm kiếm các thuộc tính của ____ ____ 6. Nó không tìm thấy cls_var, vì vậy sau đó nó tìm kiếm các thuộc tính của lớp ____. Nó tìm thấy cls_var để nó dừng lại và trả về giá trị của ____ 7.

Tuy nhiên, khi gán các thuộc tính cho self, Python luôn gán chúng trực tiếp cho đối tượng và không bao giờ lớp đối tượng trừ khi được bảo rõ ràng là làm như vậy. Đó là lý do tại sao việc khẳng định

first 
10
second
200
2 cho
first 
10
second
200
3 không ảnh hưởng đến ____ 14 ____ của ____7 attrbiute.

class A[object]:
    a = 1
a = A[]
print a.a  # prints 1
A.a = 2
print a.a  # prints 2

Đã trả lời ngày 15 tháng 7 năm 2017 lúc 19:06

Christian Deanchristian Trưởng khoa

21.5K7 Huy hiệu vàng 50 Huy hiệu bạc80 Huy hiệu ĐồngJul 15, 2017 at 19:00

Tôi tìm thấy một cái gì đó khác luôn sử dụng các cách sau để truy cập classmethod hoặc biến trong phương thức ví dụAnis

Đã trả lời ngày 15 tháng 7 năm 2017 lúc 19:1516 silver badges21 bronze badges

Bạn có thể sử dụng bản thân trong một phương thức lớp Python không?

Bằng cách sử dụng bản thân, chúng tôi có thể truy cập các thuộc tính và phương thức của lớp trong Python. Nó liên kết các thuộc tính với các đối số đã cho. Lý do bạn cần sử dụng bản thân. là bởi vì Python không sử dụng @ Cú pháp để chỉ các thuộc tính thể hiện.. It binds the attributes with the given arguments. The reason you need to use self. is because Python does not use the @ syntax to refer to instance attributes.

Có phải tất cả các phương pháp lớp Python có cần bản thân không?

Tự là phương pháp đầu tiên của mọi lớp Python khi bạn xác định một lớp trong Python, mọi phương pháp mà bạn xác định, phải chấp nhận trường hợp đó là đối số đầu tiên của nó [được gọi là bản thân theo quy ước]. Biến bản thân chỉ vào thể hiện của lớp mà bạn đang làm việc. When you define a class in Python, every method that you define, must accept that instance as its first argument [called self by convention]. The self variable points to the instance of the class that you're working with.

Phương pháp lớp có tham số tự không?

Các phương thức lớp lấy tham số CLS thay vì tham số tự.Khi phương thức được gọi, nó chỉ vào lớp.Phương thức lớp không thể sửa đổi trạng thái đối tượng nhưng nó có thể sửa đổi trạng thái lớp của tất cả các phiên bản lớp.. When the method is called, it points to the class. The class method cannot modify the object state but it can modify the class state of all the class instances.

Bản thân trong các phương pháp lớp Python là gì?

Tham số tự là tham chiếu đến thể hiện hiện tại của lớp và được sử dụng để truy cập các biến thuộc về lớp.a reference to the current instance of the class, and is used to access variables that belongs to the class.

Bài Viết Liên Quan

Chủ Đề