Hướng dẫn in python what is method inside class called - trong python, phương thức bên trong lớp được gọi là gì

Tôi có mã này tính toán khoảng cách giữa hai tọa độ. Hai chức năng đều nằm trong cùng một lớp.

Tuy nhiên, làm cách nào để gọi hàm

def scope_test[]:
    def do_local[]:
        spam = "local spam"

    def do_nonlocal[]:
        nonlocal spam
        spam = "nonlocal spam"

    def do_global[]:
        global spam
        spam = "global spam"

    spam = "test spam"
    do_local[]
    print["After local assignment:", spam]
    do_nonlocal[]
    print["After nonlocal assignment:", spam]
    do_global[]
    print["After global assignment:", spam]

scope_test[]
print["In global scope:", spam]
8 trong hàm
def scope_test[]:
    def do_local[]:
        spam = "local spam"

    def do_nonlocal[]:
        nonlocal spam
        spam = "nonlocal spam"

    def do_global[]:
        global spam
        spam = "global spam"

    spam = "test spam"
    do_local[]
    print["After local assignment:", spam]
    do_nonlocal[]
    print["After nonlocal assignment:", spam]
    do_global[]
    print["After global assignment:", spam]

scope_test[]
print["In global scope:", spam]
9?

class Coordinates:
    def distToPoint[self, p]:
        """
        Use pythagoras to find distance
        [a^2 = b^2 + c^2]
        """
        ...

    def isNear[self, p]:
        distToPoint[self, p]
        ...

Hỏi ngày 11 tháng 4 năm 2011 lúc 0:20Apr 11, 2011 at 0:20

0

Vì đây là các chức năng thành viên, hãy gọi nó là chức năng thành viên trong trường hợp,

After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
0.

def isNear[self, p]:
    self.distToPoint[p]
    ...

Đã trả lời ngày 11 tháng 4 năm 2011 lúc 0:24Apr 11, 2011 at 0:24

Jeff Mercadojeff MercadoJeff Mercado

124K31 Huy hiệu vàng239 Huy hiệu bạc259 Huy hiệu Đồng31 gold badges239 silver badges259 bronze badges

4

Điều đó không hoạt động vì

def scope_test[]:
    def do_local[]:
        spam = "local spam"

    def do_nonlocal[]:
        nonlocal spam
        spam = "nonlocal spam"

    def do_global[]:
        global spam
        spam = "global spam"

    spam = "test spam"
    do_local[]
    print["After local assignment:", spam]
    do_nonlocal[]
    print["After nonlocal assignment:", spam]
    do_global[]
    print["After global assignment:", spam]

scope_test[]
print["In global scope:", spam]
8 nằm trong lớp của bạn, vì vậy bạn cần tiền tố nó với tên lớp nếu bạn muốn tham khảo nó, như thế này:
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
2. Bạn không nên làm điều đó như vậy, mặc dù. Một cách tốt hơn để làm điều đó là tham khảo trực tiếp phương thức thông qua thể hiện lớp [đây là đối số đầu tiên của phương thức lớp], như vậy:
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
3.

Đã trả lời ngày 11 tháng 4 năm 2011 lúc 0:24Apr 11, 2011 at 0:24

Jeff Mercadojeff MercadoAleksi Torhamo

124K31 Huy hiệu vàng239 Huy hiệu bạc259 Huy hiệu Đồng2 gold badges32 silver badges42 bronze badges

6

Các lớp cung cấp một phương tiện của dữ liệu bó và chức năng cùng nhau. Tạo một lớp mới tạo ra một loại đối tượng mới, cho phép các phiên bản mới của loại đó được thực hiện. Mỗi phiên bản lớp có thể có các thuộc tính được gắn vào nó để duy trì trạng thái của nó. Các phiên bản lớp cũng có thể có các phương thức [được xác định bởi lớp của nó] để sửa đổi trạng thái của nó.

So với các ngôn ngữ lập trình khác, cơ chế lớp Python, bổ sung các lớp có tối thiểu cú pháp mới và ngữ nghĩa. Nó là một hỗn hợp của các cơ chế lớp được tìm thấy trong C ++ và Modula-3. Các lớp Python cung cấp tất cả các tính năng tiêu chuẩn của lập trình hướng đối tượng: Cơ chế kế thừa lớp cho phép nhiều lớp cơ sở, một lớp dẫn xuất có thể ghi đè bất kỳ phương thức nào của lớp cơ sở hoặc lớp của nó và một phương thức có thể gọi phương thức của một lớp cơ sở có cùng tên . Các đối tượng có thể chứa số lượng và loại dữ liệu tùy ý. Là đúng với các mô -đun, các lớp chia tay bản chất động của Python: chúng được tạo ra trong thời gian chạy và có thể được sửa đổi hơn nữa sau khi tạo.

Trong thuật ngữ C ++, thông thường các thành viên lớp [bao gồm các thành viên dữ liệu] là công khai [ngoại trừ xem bên dưới các biến riêng tư] và tất cả các hàm thành viên là ảo. Như trong Modula-3, không có chữ viết tắt nào để tham khảo các thành viên của đối tượng từ các phương thức của nó: hàm phương thức được khai báo với một đối số đầu tiên rõ ràng đại diện cho đối tượng, được cung cấp hoàn toàn bởi cuộc gọi. Như trong Smalltalk, bản thân các lớp là đối tượng. Điều này cung cấp ngữ nghĩa để nhập khẩu và đổi tên. Không giống như C ++ và Modula-3, các loại tích hợp có thể được sử dụng làm lớp cơ sở để mở rộng bởi người dùng. Ngoài ra, giống như trong C ++, hầu hết các toán tử tích hợp với cú pháp đặc biệt [toán tử số học, đăng ký, v.v.] có thể được xác định lại cho các trường hợp lớp.Private Variables], and all member functions are virtual. As in Modula-3, there are no shorthands for referencing the object’s members from its methods: the method function is declared with an explicit first argument representing the object, which is provided implicitly by the call. As in Smalltalk, classes themselves are objects. This provides semantics for importing and renaming. Unlike C++ and Modula-3, built-in types can be used as base classes for extension by the user. Also, like in C++, most built-in operators with special syntax [arithmetic operators, subscripting etc.] can be redefined for class instances.

. đã nghe nói về nó.]

9.1. Một từ về tên và đối tượngA Word About Names and Objects¶

Các đối tượng có tính cá nhân và nhiều tên [trong nhiều phạm vi] có thể được liên kết với cùng một đối tượng. Điều này được gọi là bí danh trong các ngôn ngữ khác. Điều này thường không được đánh giá cao trong cái nhìn đầu tiên tại Python và có thể bị bỏ qua một cách an toàn khi xử lý các loại cơ bản bất biến [số, chuỗi, bộ dữ liệu]. Tuy nhiên, bí danh có tác dụng đáng ngạc nhiên đối với ngữ nghĩa của mã Python liên quan đến các đối tượng có thể thay đổi như danh sách, từ điển và hầu hết các loại khác. Điều này thường được sử dụng cho lợi ích của chương trình, vì các bí danh hoạt động như con trỏ ở một số khía cạnh. Ví dụ, việc chuyển một đối tượng là rẻ vì chỉ có một con trỏ được thông qua khi thực hiện; Và nếu một hàm sửa đổi một đối tượng được truyền như một đối số, người gọi sẽ thấy sự thay đổi - điều này sẽ loại bỏ sự cần thiết của hai cơ chế truyền đối số khác nhau như trong Pascal.

9.2. Phạm vi Python và không gian tênPython Scopes and Namespaces¶

Trước khi giới thiệu các lớp học, trước tiên tôi phải nói với bạn điều gì đó về các quy tắc phạm vi Python. Các định nghĩa của lớp chơi một số thủ thuật gọn gàng với không gian tên và bạn cần biết cách phạm vi và không gian tên hoạt động để hiểu đầy đủ những gì xảy ra. Ngẫu nhiên, kiến ​​thức về chủ đề này rất hữu ích cho bất kỳ lập trình viên Python tiên tiến nào.

Hãy bắt đầu với một số định nghĩa.

Một không gian tên là một ánh xạ từ tên đến các đối tượng. Hầu hết các không gian tên hiện đang được triển khai dưới dạng từ điển Python, nhưng điều đó thường không đáng chú ý theo bất kỳ cách nào [ngoại trừ hiệu suất] và nó có thể thay đổi trong tương lai. Ví dụ về các không gian tên là: tập hợp các tên tích hợp [chứa các hàm như

After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
4 và tên ngoại lệ tích hợp]; tên toàn cầu trong một mô -đun; và tên địa phương trong một lời cầu khẩn chức năng. Theo một nghĩa nào đó, tập hợp các thuộc tính của một đối tượng cũng tạo thành một không gian tên. Điều quan trọng cần biết về các không gian tên là hoàn toàn không có mối quan hệ giữa các tên trong các không gian tên khác nhau; Chẳng hạn, hai mô -đun khác nhau đều có thể xác định hàm
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
5 mà không có sự nhầm lẫn - người dùng của các mô -đun phải có tiền tố với tên mô -đun.

Nhân tiện, tôi sử dụng thuộc tính từ cho bất kỳ tên nào theo dấu chấm - ví dụ: trong biểu thức

After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
6,
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
7 là một thuộc tính của đối tượng
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
8. Nói đúng ra, các tham chiếu đến tên trong các mô -đun là tài liệu tham khảo thuộc tính: Trong biểu thức
After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam
9,
class ClassName:
    
    .
    .
    .
    
0 là một đối tượng mô -đun và
class ClassName:
    
    .
    .
    .
    
1 là một thuộc tính của nó. Trong trường hợp này, có một ánh xạ đơn giản giữa các thuộc tính mô -đun và các tên toàn cầu được xác định trong mô -đun: chúng có chung không gian tên! 1

Các thuộc tính có thể chỉ đọc hoặc có thể ghi. Trong trường hợp sau, việc gán cho các thuộc tính là có thể. Các thuộc tính mô -đun có thể ghi: Bạn có thể viết

class ClassName:
    
    .
    .
    .
    
2. Các thuộc tính có thể ghi cũng có thể bị xóa với câu lệnh
class ClassName:
    
    .
    .
    .
    
3. Ví dụ:
class ClassName:
    
    .
    .
    .
    
4 sẽ xóa thuộc tính
class ClassName:
    
    .
    .
    .
    
5 khỏi đối tượng được đặt tên bởi
class ClassName:
    
    .
    .
    .
    
0.

Không gian tên được tạo ra vào những thời điểm khác nhau và có cuộc sống khác nhau. Không gian tên chứa các tên tích hợp được tạo khi trình thông dịch Python khởi động và không bao giờ bị xóa. Không gian tên toàn cầu cho một mô -đun được tạo khi định nghĩa mô -đun được đọc trong; Thông thường, các không gian tên mô -đun cũng kéo dài cho đến khi thông dịch thoát. Các câu lệnh được thực hiện bởi lệnh gọi cấp cao nhất của trình thông dịch, được đọc từ tệp tập lệnh hoặc tương tác, được coi là một phần của mô-đun gọi là

class ClassName:
    
    .
    .
    .
    
7, vì vậy chúng có không gian tên toàn cầu của riêng họ. [Các tên tích hợp thực sự cũng sống trong một mô-đun; cái này được gọi là
class ClassName:
    
    .
    .
    .
    
8.]

Không gian tên cục bộ cho một hàm được tạo khi hàm được gọi và bị xóa khi hàm trả về hoặc tăng một ngoại lệ không được xử lý trong hàm. .

Phạm vi là một khu vực văn bản của chương trình Python nơi không gian tên có thể truy cập trực tiếp. Có thể truy cập trực tiếp trực tiếp ở đây có nghĩa là một tham chiếu không đủ tiêu chuẩn cho một tên cố gắng tìm tên trong không gian tên.

Mặc dù phạm vi được xác định tĩnh, chúng được sử dụng động. Bất cứ lúc nào trong quá trình thực hiện, có 3 hoặc 4 phạm vi lồng nhau có không gian tên có thể truy cập trực tiếp:

  • Phạm vi trong cùng, được tìm kiếm trước, chứa tên địa phương

  • Phạm vi của bất kỳ chức năng bao quanh nào, được tìm kiếm bắt đầu với phạm vi bao quanh gần nhất, chứa các tên không cục bộ, nhưng cũng không phải là toàn cầu

  • Phạm vi tiếp theo có chứa các tên toàn cầu hiện tại của mô-đun

  • Phạm vi ngoài cùng [được tìm kiếm cuối cùng] là không gian tên chứa tên tích hợp

Nếu một tên được khai báo toàn cầu, thì tất cả các tài liệu tham khảo và bài tập sẽ trực tiếp đến phạm vi giữa chứa các tên toàn cầu của mô -đun. Để tái lập các biến được tìm thấy bên ngoài phạm vi trong cùng, câu lệnh

class ClassName:
    
    .
    .
    .
    
9 có thể được sử dụng; Nếu không được tuyên bố là không thuộc địa, các biến đó chỉ được đọc [một nỗ lực ghi vào một biến như vậy sẽ chỉ đơn giản là tạo một biến cục bộ mới trong phạm vi trong cùng, để lại biến bên ngoài có tên giống hệt nhau].

Thông thường, phạm vi cục bộ tham chiếu tên cục bộ của hàm [văn bản]. Các chức năng bên ngoài, phạm vi cục bộ tham chiếu cùng một không gian tên với phạm vi toàn cầu: không gian tên mô -đun. Định nghĩa lớp đặt một không gian tên khác trong phạm vi địa phương.

Điều quan trọng là phải nhận ra rằng phạm vi được xác định bằng văn bản: phạm vi toàn cầu của một hàm được xác định trong một mô -đun là không gian tên mô -đun, bất kể hàm bí danh nào được gọi là bí danh. Mặt khác, việc tìm kiếm thực tế cho các tên được thực hiện một cách linh hoạt, tại thời điểm chạy - tuy nhiên, định nghĩa ngôn ngữ đang phát triển theo độ phân giải tên tĩnh, tại thời điểm biên dịch, do đó, don dựa vào độ phân giải tên động! [Trong thực tế, các biến cục bộ đã được xác định tĩnh.]

Một câu đố đặc biệt của Python là - nếu không có tuyên bố

class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'
0 hoặc
class ClassName:
    
    .
    .
    .
    
9 có hiệu lực - các bài tập cho các tên luôn đi vào phạm vi trong cùng. Bài tập không sao chép dữ liệu - chúng chỉ liên kết tên với các đối tượng. Điều tương tự cũng đúng với việc xóa: câu lệnh
class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'
2 loại bỏ liên kết của
class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'
3 khỏi không gian tên được tham chiếu bởi phạm vi cục bộ. Trên thực tế, tất cả các hoạt động giới thiệu tên mới đều sử dụng phạm vi cục bộ: đặc biệt, các câu lệnh và định nghĩa chức năng
class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'
4 liên kết tên mô -đun hoặc hàm trong phạm vi cục bộ.

Tuyên bố

class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'
0 có thể được sử dụng để chỉ ra rằng các biến cụ thể sống trong phạm vi toàn cầu và nên được bật lại ở đó; Tuyên bố
class ClassName:
    
    .
    .
    .
    
9 chỉ ra rằng các biến cụ thể sống trong một phạm vi kèm theo và nên được bật lại ở đó.

9.2.1. Phạm vi và không gian tên ví dụScopes and Namespaces Example¶

Đây là một ví dụ chứng minh cách tham chiếu các phạm vi và không gian tên khác nhau và cách

class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'
0 và
class ClassName:
    
    .
    .
    .
    
9 ảnh hưởng đến ràng buộc biến:

def scope_test[]:
    def do_local[]:
        spam = "local spam"

    def do_nonlocal[]:
        nonlocal spam
        spam = "nonlocal spam"

    def do_global[]:
        global spam
        spam = "global spam"

    spam = "test spam"
    do_local[]
    print["After local assignment:", spam]
    do_nonlocal[]
    print["After nonlocal assignment:", spam]
    do_global[]
    print["After global assignment:", spam]

scope_test[]
print["In global scope:", spam]

Đầu ra của mã ví dụ là:

After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam

Lưu ý cách gán cục bộ [mặc định] đã không thay đổi liên kết thư rác của Scope_test. Bài tập

class ClassName:
    
    .
    .
    .
    
9 đã thay đổi liên kết spam của Scope_test và gán
class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'
0 đã thay đổi liên kết cấp độ mô-đun.

Bạn cũng có thể thấy rằng không có ràng buộc trước đó cho thư rác trước khi gán

class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'
0.

9.3. Cái nhìn đầu tiên về các lớp họcA First Look at Classes¶

Các lớp giới thiệu một chút cú pháp mới, ba loại đối tượng mới và một số ngữ nghĩa mới.

9.3.1. Định nghĩa lớp cú phápClass Definition Syntax¶

Hình thức đơn giản nhất của định nghĩa lớp trông như thế này:

class ClassName:
    
    .
    .
    .
    

Định nghĩa lớp, giống như định nghĩa hàm [câu lệnh

def __init__[self]:
    self.data = []
2] phải được thực thi trước khi chúng có bất kỳ ảnh hưởng nào. [Bạn có thể hình dung một định nghĩa lớp trong một nhánh của câu lệnh
def __init__[self]:
    self.data = []
3 hoặc bên trong một hàm.]

Trong thực tế, các câu lệnh bên trong định nghĩa lớp thường sẽ là định nghĩa chức năng, nhưng các tuyên bố khác được cho phép và đôi khi hữu ích - chúng tôi sẽ quay lại điều này sau. Các định nghĩa hàm bên trong một lớp thường có một dạng danh sách đối số đặc biệt, được quyết định bởi các quy ước gọi cho các phương thức - một lần nữa, điều này được giải thích sau.

Khi một định nghĩa lớp được nhập, một không gian tên mới được tạo và được sử dụng làm phạm vi cục bộ - do đó, tất cả các bài tập cho các biến cục bộ sẽ đi vào không gian tên mới này. Cụ thể, các định nghĩa chức năng liên kết tên của hàm mới ở đây.

Khi một định nghĩa lớp được để lại bình thường [thông qua cuối], một đối tượng lớp được tạo. Đây về cơ bản là một trình bao bọc xung quanh nội dung của không gian tên được tạo bởi định nghĩa lớp; Chúng tôi sẽ tìm hiểu thêm về các đối tượng lớp trong phần tiếp theo. Phạm vi cục bộ ban đầu [một hiệu ứng ngay trước khi định nghĩa lớp được nhập] được khôi phục và đối tượng lớp bị ràng buộc ở đây với tên lớp được đưa ra trong tiêu đề định nghĩa lớp [

def __init__[self]:
    self.data = []
4 trong ví dụ].

9.3.2. Đối tượng lớpClass Objects¶

Đối tượng lớp hỗ trợ hai loại hoạt động: Tài liệu tham khảo thuộc tính và khởi tạo.

Tài liệu tham khảo thuộc tính Sử dụng cú pháp tiêu chuẩn được sử dụng cho tất cả các tham chiếu thuộc tính trong Python:

def __init__[self]:
    self.data = []
5. Tên thuộc tính hợp lệ là tất cả các tên nằm trong không gian tên lớp khi đối tượng lớp được tạo. Vì vậy, nếu định nghĩa lớp trông như thế này:

class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'

Sau đó,

def __init__[self]:
    self.data = []
6 và
def __init__[self]:
    self.data = []
7 là tài liệu tham khảo thuộc tính hợp lệ, trả về một số nguyên và một đối tượng hàm, tương ứng. Các thuộc tính lớp cũng có thể được gán cho, vì vậy bạn có thể thay đổi giá trị của
def __init__[self]:
    self.data = []
6 bằng cách gán.
def __init__[self]:
    self.data = []
9 cũng là một thuộc tính hợp lệ, trả về tài liệu thuộc lớp:
>>> class Complex:
...     def __init__[self, realpart, imagpart]:
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex[3.0, -4.5]
>>> x.r, x.i
[3.0, -4.5]
0.

Lớp Instantiation sử dụng ký hiệu chức năng. Chỉ cần giả vờ rằng đối tượng lớp là một hàm không tham số trả về một thể hiện mới của lớp. Ví dụ: giả sử lớp trên]:

Tạo một thể hiện mới của lớp và gán đối tượng này cho biến cục bộ

class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'
3.

Hoạt động khởi tạo [gọi gọi cho đối tượng lớp] tạo ra một đối tượng trống. Nhiều lớp muốn tạo các đối tượng với các trường hợp được tùy chỉnh theo trạng thái ban đầu cụ thể. Do đó, một lớp có thể xác định một phương thức đặc biệt có tên

>>> class Complex:
...     def __init__[self, realpart, imagpart]:
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex[3.0, -4.5]
>>> x.r, x.i
[3.0, -4.5]
2, như thế này:

def __init__[self]:
    self.data = []

Khi một lớp xác định một phương thức

>>> class Complex:
...     def __init__[self, realpart, imagpart]:
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex[3.0, -4.5]
>>> x.r, x.i
[3.0, -4.5]
2, việc khởi động lớp sẽ tự động gọi
>>> class Complex:
...     def __init__[self, realpart, imagpart]:
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex[3.0, -4.5]
>>> x.r, x.i
[3.0, -4.5]
2 cho thể hiện lớp mới được tạo. Vì vậy, trong ví dụ này, một trường hợp mới, khởi tạo có thể thu được bằng cách:

Tất nhiên, phương pháp

>>> class Complex:
...     def __init__[self, realpart, imagpart]:
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex[3.0, -4.5]
>>> x.r, x.i
[3.0, -4.5]
2 có thể có các đối số cho tính linh hoạt cao hơn. Trong trường hợp đó, các đối số được đưa ra cho toán tử khởi động lớp được chuyển sang
>>> class Complex:
...     def __init__[self, realpart, imagpart]:
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex[3.0, -4.5]
>>> x.r, x.i
[3.0, -4.5]
2. Ví dụ,

>>> class Complex:
...     def __init__[self, realpart, imagpart]:
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex[3.0, -4.5]
>>> x.r, x.i
[3.0, -4.5]

9.3.3. Đối tượng thể hiệnInstance Objects¶

Bây giờ chúng ta có thể làm gì với các đối tượng ví dụ? Các hoạt động duy nhất được hiểu bởi các đối tượng ví dụ là tài liệu tham khảo thuộc tính. Có hai loại tên thuộc tính hợp lệ: thuộc tính và phương thức dữ liệu.

Các thuộc tính dữ liệu tương ứng với các biến thể hiện của các biến thể trong số các thành viên dữ liệu và các thành viên dữ liệu của người Hồi giáo trong C ++. Thuộc tính dữ liệu không cần phải được khai báo; Giống như các biến cục bộ, chúng sinh ra sự tồn tại khi chúng được gán lần đầu tiên. Ví dụ: nếu

class MyClass:
    """A simple example class"""
    i = 12345

    def f[self]:
        return 'hello world'
3 là ví dụ của
>>> class Complex:
...     def __init__[self, realpart, imagpart]:
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex[3.0, -4.5]
>>> x.r, x.i
[3.0, -4.5]
8 được tạo ở trên, đoạn mã sau sẽ in giá trị
>>> class Complex:
...     def __init__[self, realpart, imagpart]:
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex[3.0, -4.5]
>>> x.r, x.i
[3.0, -4.5]
9, mà không để lại dấu vết:

x.counter = 1
while x.counter >> x = Complex[3.0, -4.5]
>>> x.r, x.i
[3.0, -4.5]
8, điều này sẽ trả về chuỗi
x.counter = 1
while x.counter 

Bài Viết Liên Quan

Chủ Đề