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.0761 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.0761 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