Phương thức được định nghĩa trong lớp hình chữ nhật được sử dụng để vẽ hình chữ nhật Python là gì?
lớp Hình chữ nhật (đối tượng). def __init__(self,width=2,height=3,color='r'). bản thân. chiều cao = chiều cao bản thân. chiều rộng = chiều rộng bản thân. color=color def drawRectangle(self). nhập matplotlib. pyplot dưới dạng plt plt. gca(). add_patch(plt. Hình chữ nhật ((0, 0), chính nó. chiều rộng, bản thân. chiều cao, fc=bản thân. màu)) plt. trục ('được chia tỷ lệ') plt. chỉ() Chúng tôi cung cấp nhiều lựa chọn các khóa học từ các trường đại học và tổ chức văn hóa hàng đầu từ khắp nơi trên thế giới. Chúng được cung cấp từng bước một và có thể truy cập được trên thiết bị di động, máy tính bảng và máy tính để bàn, vì vậy bạn có thể phù hợp với việc học xung quanh cuộc sống của mình Show
Chúng tôi tin rằng việc học phải là một trải nghiệm xã hội, thú vị, vì vậy các khóa học của chúng tôi mang đến cơ hội thảo luận những gì bạn đang học với những người khác trong quá trình học, giúp bạn có những khám phá mới mẻ và hình thành những ý tưởng mới Tìm hiểu thêm về cách FutureLearn đang thay đổi cách tiếp cận giáo dục Giả sử rằng chúng ta muốn một lớp biểu diễn một hình chữ nhật nằm ở đâu đó trong mặt phẳng XY. Câu hỏi đặt ra là chúng ta phải cung cấp thông tin gì để chỉ định một hình chữ nhật như vậy? Có một vài khả năng. chúng ta có thể chỉ định tâm của hình chữ nhật (hai tọa độ) và kích thước của nó (chiều rộng và chiều cao); . Một lựa chọn thông thường là chỉ định góc trên bên trái của hình chữ nhật và kích thước Một lần nữa, chúng ta sẽ định nghĩa một lớp mới và cung cấp cho nó một phương thức khởi tạo và một phương thức chuyển đổi chuỗi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17class Rectangle: """ A class to manufacture rectangle objects """ def __init__(self, posn, w, h): """ Initialize rectangle at posn, with width w, height h """ self.corner = posn self.width = w self.height = h def __str__(self): return "({0}, {1}, {2})" .format(self.corner, self.width, self.height) box = Rectangle(Point(0, 0), 100, 200) bomb = Rectangle(Point(100, 80), 5, 10) # In my video game print("box: ", box) print("bomb: ", bomb) Để chỉ định góc trên bên trái, chúng tôi đã nhúng một đối tượng Điểm (như chúng tôi đã sử dụng trong chương trước) trong đối tượng mới của mình. . Chúng tôi tạo hai đối tượng Rectangle object! We create two new Rectangle mới, sau đó in chúng ra. box: ((0, 0), 100, 200) bomb: ((100, 80), 5, 10) Toán tử dấu chấm soạn. Biểu thức hộp. góc phố. x có nghĩa là “Chuyển đến đối tượng mà hộp đề cập đến và chọn thuộc tính của nó có tên là corner, then go to that object and select its attribute named x”. Hình vẽ thể hiện trạng thái của đối tượng này 16. 2. Các đối tượng có thể thay đổiChúng ta có thể thay đổi trạng thái của một đối tượng bằng cách gán một trong các thuộc tính của nó. Ví dụ: để tăng kích thước của hình chữ nhật mà không thay đổi vị trí của nó, chúng ta có thể sửa đổi các giá trị của chiều rộng và . : box.width += 50 box.height += 100 Tất nhiên, chúng tôi có thể muốn cung cấp một phương thức để đóng gói điều này bên trong lớp. Chúng tôi cũng sẽ cung cấp một phương pháp khác để di chuyển vị trí của hình chữ nhật sang nơi khác 1 2 3 4 5 6 7 8 9 10 11 12class Rectangle: # ... def grow(self, delta_width, delta_height): """ Grow (or shrink) this object by the deltas """ self.width += delta_width self.height += delta_height def move(self, dx, dy): """ Move this object by the deltas """ self.corner.x += dx self.corner.y += dy Hãy để chúng tôi thử điều này >>> r = Rectangle(Point(10,5), 100, 50) >>> print(r) ((10, 5), 100, 50) >>> r.grow(25, -10) >>> print(r) ((10, 5), 125, 40) >>> r.move(-10, 10) print(r) ((0, 15), 125, 40) 16. 3. giống nhauÝ nghĩa của từ “giống nhau” dường như hoàn toàn rõ ràng cho đến khi chúng ta suy nghĩ kỹ về nó, và sau đó chúng ta nhận ra rằng có nhiều điều hơn chúng ta mong đợi ban đầu Ví dụ: nếu chúng ta nói, "Alice và Bob có cùng một chiếc xe hơi", chúng ta muốn nói rằng chiếc xe của cô ấy và của anh ấy có cùng kiểu dáng và kiểu dáng, nhưng chúng là hai chiếc xe khác nhau. Nếu chúng ta nói, "Alice và Bob có cùng một người mẹ", chúng ta muốn nói rằng mẹ của cô ấy và của anh ấy là cùng một người Khi chúng ta nói về các đối tượng, có một sự mơ hồ tương tự. Ví dụ: nếu hai Điểm giống nhau, điều đó có nghĩa là chúng chứa cùng một dữ liệu (tọa độ) hay chúng thực sự là cùng một đối tượng?< Chúng ta đã thấy toán tử is trong chương về danh sách, nơi chúng ta đã nói về bí danh. nó cho phép chúng tôi tìm hiểu xem hai tham chiếu có đề cập đến cùng một đối tượng không. >>> p1 = Point(3, 4) >>> p2 = Point(3, 4) >>> p1 is p2 False Mặc dù p1 và p2 có cùng tọa độ . Nếu chúng ta gán p1 cho p3 , thì hai biến là bí danh của .
Loại đẳng thức này được gọi là đẳng thức nông vì nó chỉ so sánh các tham chiếu, không so sánh nội dung của các đối tượng Để so sánh nội dung của các đối tượng — bằng nhau sâu sắc — chúng ta có thể viết một hàm gọi là same_coordinates . 1 2class Rectangle: """ A class to manufacture rectangle objects """ def __init__(self, posn, w, h): """ Initialize rectangle at posn, with width w, height h """ self.corner = posn self.width = w self.height = h def __str__(self): return "({0}, {1}, {2})" .format(self.corner, self.width, self.height) box = Rectangle(Point(0, 0), 100, 200) bomb = Rectangle(Point(100, 80), 5, 10) # In my video game print("box: ", box) print("bomb: ", bomb)0 Bây giờ nếu chúng ta tạo hai đối tượng khác nhau chứa cùng một dữ liệu, chúng ta có thể sử dụng same_point để tìm hiểu xem chúng có đại diện cho các điểm giống nhau không . class Rectangle: """ A class to manufacture rectangle objects """ def __init__(self, posn, w, h): """ Initialize rectangle at posn, with width w, height h """ self.corner = posn self.width = w self.height = h def __str__(self): return "({0}, {1}, {2})" .format(self.corner, self.width, self.height) box = Rectangle(Point(0, 0), 100, 200) bomb = Rectangle(Point(100, 80), 5, 10) # In my video game print("box: ", box) print("bomb: ", bomb)1 Tất nhiên, nếu hai biến cùng chỉ một đối tượng thì chúng có mức độ nông và sâu bằng nhau. Coi chừng == “Khi tôi dùng một từ,” Humpty Dumpty nói, với một giọng khá khinh thường, “nó chỉ có nghĩa theo ý tôi muốn - không hơn không kém. " Alice ở xứ sở thần tiên Python có một tính năng mạnh mẽ cho phép người thiết kế một lớp quyết định một thao tác như thế nào == hoặc < should mean. (We’ve just shown how we can control how our own objects are converted to strings, so we’ve already made a start!) We’ll cover more detail later. But sometimes the implementors will attach shallow equality semantics, and sometimes deep equality, as shown in this little experiment: class Rectangle: """ A class to manufacture rectangle objects """ def __init__(self, posn, w, h): """ Initialize rectangle at posn, with width w, height h """ self.corner = posn self.width = w self.height = h def __str__(self): return "({0}, {1}, {2})" .format(self.corner, self.width, self.height) box = Rectangle(Point(0, 0), 100, 200) bomb = Rectangle(Point(100, 80), 5, 10) # In my video game print("box: ", box) print("bomb: ", bomb)2class Rectangle: """ A class to manufacture rectangle objects """ def __init__(self, posn, w, h): """ Initialize rectangle at posn, with width w, height h """ self.corner = posn self.width = w self.height = h def __str__(self): return "({0}, {1}, {2})" .format(self.corner, self.width, self.height) box = Rectangle(Point(0, 0), 100, 200) bomb = Rectangle(Point(100, 80), 5, 10) # In my video game print("box: ", box) print("bomb: ", bomb)3 kết quả này class Rectangle: """ A class to manufacture rectangle objects """ def __init__(self, posn, w, h): """ Initialize rectangle at posn, with width w, height h """ self.corner = posn self.width = w self.height = h def __str__(self): return "({0}, {1}, {2})" .format(self.corner, self.width, self.height) box = Rectangle(Point(0, 0), 100, 200) bomb = Rectangle(Point(100, 80), 5, 10) # In my video game print("box: ", box) print("bomb: ", bomb)4 Vì vậy, chúng tôi kết luận rằng mặc dù hai danh sách (hoặc bộ, v.v. ) là các đối tượng riêng biệt có địa chỉ bộ nhớ khác nhau, đối với danh sách, toán tử == kiểm tra độ bằng sâu, trong khi đối với điểm, toán tử này thực hiện kiểm tra nông. 16. 4. Sao chépBí danh có thể khiến chương trình khó đọc vì những thay đổi được thực hiện ở một nơi có thể có tác dụng không mong muốn ở một nơi khác. Thật khó để theo dõi tất cả các biến có thể đề cập đến một đối tượng nhất định Sao chép một đối tượng thường là một cách thay thế cho răng cưa. Mô-đun sao chép chứa hàm có tên là sao chép có thể sao chép bất kỳ đối tượng nào. class Rectangle: """ A class to manufacture rectangle objects """ def __init__(self, posn, w, h): """ Initialize rectangle at posn, with width w, height h """ self.corner = posn self.width = w self.height = h def __str__(self): return "({0}, {1}, {2})" .format(self.corner, self.width, self.height) box = Rectangle(Point(0, 0), 100, 200) bomb = Rectangle(Point(100, 80), 5, 10) # In my video game print("box: ", box) print("bomb: ", bomb)5 Sau khi chúng tôi nhập mô-đun bản sao , chúng tôi có thể sử dụng bản sao function to make a new Point. p1 và p2 không giống nhau nhưng chúng chứa cùng một điểm . Để sao chép một đối tượng đơn giản như Điểm , không chứa bất kỳ đối tượng nhúng nào, . Điều này được gọi là sao chép nông. is sufficient. This is called shallow copying. Đối với nội dung như Hình chữ nhật , chứa tham chiếu đến Điểm, copy doesn’t do quite the right thing. It copies the reference to the Điểm , vì vậy cả Rectangle cũ . Point. Có thể bạn quan tâmNếu chúng ta tạo một hộp, b1 , theo cách thông thường và sau đó tạo một bản sao, . , using copy, the resulting state diagram looks like this: Đây gần như chắc chắn không phải là điều chúng tôi muốn. Trong trường hợp này, việc gọi grow trên một trong các đối tượng Rectangle sẽ không . Hành vi này gây nhầm lẫn và dễ bị lỗi. Bản sao nông đã tạo bí danh cho move on either would affect both! This behavior is confusing and error-prone. The shallow copy has created an alias to the Điểm đại diện cho góc. May mắn thay, mô-đun copy chứa một hàm có tên deepcopy that copies not only the object but also any embedded objects. It won’t be surprising to learn that this operation is called a deep copy. class Rectangle: """ A class to manufacture rectangle objects """ def __init__(self, posn, w, h): """ Initialize rectangle at posn, with width w, height h """ self.corner = posn self.width = w self.height = h def __str__(self): return "({0}, {1}, {2})" .format(self.corner, self.width, self.height) box = Rectangle(Point(0, 0), 100, 200) bomb = Rectangle(Point(100, 80), 5, 10) # In my video game print("box: ", box) print("bomb: ", bomb)6 Bây giờ b1 và b2 là các đối tượng hoàn toàn riêng biệt. 16. 5. Bảng chú giảideep copyĐể sao chép nội dung của một đối tượng cũng như bất kỳ đối tượng được nhúng nào và bất kỳ đối tượng nào được nhúng trong chúng, v.v.; . bình đẳng sâu Bình đẳng giá trị hoặc hai tham chiếu trỏ đến các đối tượng có cùng giá trị. bản sao nông Để sao chép nội dung của một đối tượng, bao gồm mọi tham chiếu đến các đối tượng được nhúng; . bình đẳng nông Bình đẳng của các tham chiếu hoặc hai tham chiếu trỏ đến cùng một đối tượng. deepcopy function in the copy module.deep equalityEquality of values, or two references that point to objects that have the same value.shallow copyTo copy the contents of an object, including any references to embedded objects; implemented by the copy function in the copy module.shallow equalityEquality of references, or two references that point to the same object.16. 6. bài tập
|