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

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
Bạn có thể mở khóa những cơ hội mới với quyền truy cập không giới hạn vào hàng trăm khóa học ngắn hạn trực tuyến trong một năm bằng cách đăng ký gói Không giới hạn của chúng tôi. Xây dựng kiến ​​thức của bạn với các trường đại học và tổ chức hàng đầu

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
17

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)

Để 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

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ì?

16. 2. Các đối tượng có thể thay đổi

Chú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 . :

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
12

class 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ù p1p2 có cùng tọa độ . Nếu chúng ta gán p1 cho p3 , thì hai biến là bí danh của .

________số 8_______

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
2

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)
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)
2

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)
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ép

Bí 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. p1p2 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.

Nế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:

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ì?

Đâ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ờ b1b2 là các đối tượng hoàn toàn riêng biệt.

16. 5. Bảng chú giải

deep 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

  1. Thêm phương thức diện tích vào lớp Rectangle mà .

    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)
    
    7

  2. Viết phương thức chu vi trong lớp Rectangle sao cho .

    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)
    
    8

  3. Viết phương thức flip trong lớp Rectangle mà .

    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)
    
    9

  4. Viết một phương thức mới trong lớp Rectangle để kiểm tra xem một Điểm falls within the rectangle. For this exercise, assume that a rectangle at (0,0) with width 10 and height 5 has open upper bounds on the width and height, i.e. it stretches in the x direction from [0 to 10), where 0 is included but 10 is excluded, and from [0 to 5) in the y direction. So it does not contain the point (10, 2). These tests should pass:

    box: ((0, 0), 100, 200)
    bomb: ((100, 80), 5, 10)
    
    0

  5. Trong các trò chơi, chúng ta thường đặt một “hộp giới hạn” hình chữ nhật xung quanh các nhân vật của mình. (Sprite là một đối tượng có thể di chuyển trong trò chơi, như chúng ta sẽ thấy ngay sau đây. ) Sau đó, chúng tôi có thể phát hiện va chạm giữa bom và tàu vũ trụ, bằng cách so sánh xem các hình chữ nhật của chúng có chồng lên nhau ở bất kỳ đâu không

    Viết hàm xác định xem hai hình chữ nhật có va chạm nhau không. Gợi ý. đây có thể là một bài tập khá khó khăn. Hãy suy nghĩ cẩn thận về tất cả các trường hợp trước khi bạn viết mã

    Phương thức __ str __ được sử dụng trong Python là gì?

    Trăn __str__() . Phương thức này được gọi khi hàm print() hoặc str() được gọi trên một đối tượng. returns the string representation of the object. This method is called when print() or str() function is invoked on an object.

    Các phương thức của lớp đối tượng trong Python là gì?

    Các lớp và đối tượng Python .
    Tạo một lớp học. Để tạo một lớp, hãy sử dụng từ khóa lớp. .
    Tạo đối tượng. Bây giờ chúng ta có thể sử dụng lớp có tên MyClass để tạo các đối tượng. .
    Tham số bản thân. .
    Sửa đổi thuộc tính đối tượng. .
    Xóa thuộc tính đối tượng. .
    Xóa đối tượng

    Lớp có phải là loại do người dùng định nghĩa trong Python không?

    Kiểu dữ liệu do lập trình viên tạo ra được gọi là kiểu dữ liệu 'do người dùng định nghĩa'. Ví dụ: mảng, lớp hoặc mô-đun là kiểu dữ liệu do người dùng định nghĩa .

    Thuộc tính màu được đặt thành trong Python là gì?

    Thuộc tính màu đối với hình tròn màu đỏ là màu đỏ, đối với đối tượng hình tròn màu xanh lá cây, thuộc tính màu là màu xanh lá cây và đối với hình tròn màu vàng, thuộc tính màu là màu vàng. Methods Methods give you a way to change or interact with the object; they are functions that interact with objects.