Hướng dẫn how to override a variable in python - cách ghi đè một biến trong python

Dưới đây, base_id_id là một biến lớp và được chia sẻ giữa tất cả các lớp con. Có cách nào để tách chúng vào mỗi lớp không?
Is there a way to separate them into each class?

from itertools import count

class Parent(object):
    base_id = 0
    _id = count(0)

    def __init__(self):
        self.id = self.base_id + self._id.next()


class Child1(Parent):
    base_id = 100
    def __init__(self):
        Parent.__init__(self)
        print 'Child1:', self.id

class Child2(Parent):
    base_id = 200
    def __init__(self):
        Parent.__init__(self)
        print 'Child2:', self.id

c1 = Child1()                   # 100
c2 = Child2()                   # 201 <- want this to be 200
c1 = Child1()                   # 102 <- want this to be 101
c2 = Child2()                   # 203 <- want this to be 201

Hướng dẫn how to override a variable in python - cách ghi đè một biến trong python

Falsetru

345K59 Huy hiệu vàng690 Huy hiệu bạc613 Huy hiệu Đồng59 gold badges690 silver badges613 bronze badges

Đã hỏi ngày 1 tháng 11 năm 2013 lúc 2:09Nov 1, 2013 at 2:09

Hướng dẫn how to override a variable in python - cách ghi đè một biến trong python

2

Nếu bạn thực sự cần sử dụng ID theo cách này, hãy sử dụng tham số:

class Parent(object):
    def __init__(self, id):
        self.id = id

class Child1(Parent):
    _id_counter = count(0)
    def __init__(self):
        Parent.__init__(self, 100 + self._id_counter.next())
        print 'Child1:', self.id

etc.

Điều này giả định rằng bạn sẽ không xây dựng các phiên bản trực tiếp của Parent, nhưng điều đó có vẻ hợp lý với mã ví dụ của bạn.

Đã trả lời ngày 1 tháng 11 năm 2013 lúc 2:21Nov 1, 2013 at 2:21

Hướng dẫn how to override a variable in python - cách ghi đè một biến trong python

jpmc26jpmc26jpmc26

27.1k11 Huy hiệu vàng91 Huy hiệu bạc143 Huy hiệu đồng11 gold badges91 silver badges143 bronze badges

Nếu bạn không muốn vi phạm nguyên tắc khô như Falsetru gợi ý, bạn sẽ cần sử dụng các metaclass. Tôi đã nghĩ đến việc viết một cái gì đó, nhưng đã có một mô tả dài về các metaclass trên đó, vì vậy hãy kiểm tra nó.

Tóm lại, Metaclasses cho phép bạn kiểm soát việc tạo lớp con.

Về cơ bản, những gì bạn cần làm là, khi tạo ra một lớp con của Parent, thêm thành viên _id vào lớp con mới được tạo.

Đã trả lời ngày 1 tháng 11 năm 2013 lúc 2:18Nov 1, 2013 at 2:18

Hướng dẫn how to override a variable in python - cách ghi đè một biến trong python

Mike Desimonemike DesimoneMike DeSimone

40.6K10 Huy hiệu vàng71 Huy hiệu bạc95 Huy hiệu Đồng10 gold badges71 silver badges95 bronze badges

Như bạn đã nói trong câu hỏi, _id được chia sẻ bởi phụ huynh và tất cả các lớp học. Xác định _id cho mỗi lớp trẻ em.

from itertools import count

class Parent(object):
    base_id = 0
    _id = count(0)

    def __init__(self):
        self.id = self.base_id + self._id.next()


class Child1(Parent):
    base_id = 100
    _id = count(0) # <-------
    def __init__(self):
        Parent.__init__(self)
        print 'Child1:', self.id

class Child2(Parent):
    base_id = 200
    _id = count(0) # <-------
    def __init__(self):
        Parent.__init__(self)
        print 'Child2:', self.id

c1 = Child1()                   # 100
c2 = Child2()                   # 200
c1 = Child1()                   # 101
c2 = Child2()                   # 201

CẬP NHẬT

Sử dụng Metaclass:

class IdGenerator(type):
    def __new__(mcs, name, bases, attrs):
        attrs['_id'] = count(0)
        return type.__new__(mcs, name, bases, attrs)

class Parent(object):
    __metaclass__ = IdGenerator
    base_id = 0
    def __init__(self):
        self.id = self.base_id + next(self._id)

Đã trả lời ngày 1 tháng 11 năm 2013 lúc 2:14Nov 1, 2013 at 2:14

Falsetrufalsetrufalsetru

345K59 Huy hiệu vàng690 Huy hiệu bạc613 Huy hiệu Đồng59 gold badges690 silver badges613 bronze badges

Kết quả hàng đầu từ trên web

Làm rõ thứ tự ghi đè giữa các biến envfile và env ...

Cung cấp cách chuẩn hóa về cách các biến ENV ghi đè .ENV ... Cài đặt EnvFile (người dùng hoặc không gian làm việc) sẽ ghi đè các biến được xác định trong & nbsp; ...

Các biến môi trường để cấu hình AWS CLI

Các biến môi trường cung cấp một cách khác để chỉ định các tùy chọn và thông tin đăng nhập cấu hình và có thể hữu ích cho kịch bản hoặc tạm thời cài đặt một & nbsp; ...

Làm việc với các biến môi trường trong Python - Twilio

Các biến môi trường cung cấp một cách tuyệt vời để định cấu hình ứng dụng Python của bạn, loại bỏ nhu cầu chỉnh sửa mã nguồn của bạn khi & nbsp; ...

Chúng ta cần nói về .ENV | Nền tảng.sh

Các tệp .ENV ngày càng phổ biến như một cách để định cấu hình một ứng dụng. Tiêu chuẩn lỏng lẻo này cung cấp một số lợi ích, hầu hết trong số đó ...

Đọc thêm>

Sử dụng các biến môi trường | Tài liệu chạy trên đám mây

Các biến môi trường được xác định trong hợp đồng thời gian chạy của container được bảo lưu và không thể được đặt. Cụ thể, biến môi trường cổng được tiêm & nbsp; ......

Đọc thêm>

Sử dụng các biến môi trường | Tài liệu chạy trên đám mây

Các biến môi trường được xác định trong hợp đồng thời gian chạy của container được bảo lưu và không thể được đặt. Cụ thể, biến môi trường cổng được tiêm & nbsp; ......

Bài trung bình liên quan hàng đầu

Câu hỏi về Stackoverflow liên quan hàng đầu

Khắc phục sự cố mã trực tiếp

Lightrun cho phép các nhà phát triển thêm nhật ký, số liệu và ảnh chụp nhanh vào mã trực tiếp - không cần khởi động lại hoặc triển khai lại.

Bắt đầu miễn phí

Chủ đề Reddit liên quan hàng đầu

Bài đăng hackernoon liên quan hàng đầu

Tweet liên quan đến hàng đầu

Làm thế nào để bạn ghi đè một biến trong Python?

1. gán như x = 10 ở trên đặt một con trỏ vào biến đó, trỏ đến giá trị. 2. Nhiệm vụ như y = 'tạm biệt' ở trên, trong đó biến có một con trỏ hiện có trong đó, ghi đè lên con trỏ hiện có với đoạn mới.Assignment like y = 'bye' above, where the variable has an existing pointer in it, overwrites the existing pointer with the new one.

Bạn có thể ghi đè một biến?

Ghi đè chỉ áp dụng cho các phương thức nhưng không phải cho các biến.Trong Java, nếu cả lớp con và cha mẹ đều có một biến có cùng tên, biến của lớp con ẩn biến của lớp cha, ngay cả khi các loại của chúng khác nhau.Khái niệm này được gọi là ẩn khác nhau.. In Java, if the child and parent class both have a variable with the same name, Child class's variable hides the parent class's variable, even if their types are different. This concept is known as Variable Hiding.

Các biến có thể được ghi đè trong Python không?

Một số giá trị trong Python có thể được sửa đổi, và một số không thể.Điều này không bao giờ có nghĩa là chúng ta không thể thay đổi giá trị của một biến - nhưng nếu một biến chứa một giá trị của một loại bất biến, chúng ta chỉ có thể gán cho nó một giá trị mới.Chúng ta không thể thay đổi giá trị hiện có theo bất kỳ cách nào.. This does not ever mean that we can't change the value of a variable – but if a variable contains a value of an immutable type, we can only assign it a new value. We cannot alter the existing value in any way.

Các biến lớp có thể được thay đổi Python không?

Sửa đổi các biến lớp Tuy nhiên, chúng tôi có thể thay đổi giá trị của biến lớp trong lớp hoặc bên ngoài lớp.Lưu ý: Chúng ta nên thay đổi giá trị của biến lớp chỉ bằng tên lớp.Lưu ý: Đó là cách thực hành tốt nhất để sử dụng tên lớp để thay đổi giá trị của biến lớp.we can change the value of the class variable either in the class or outside of class. Note: We should change the class variable's value using the class name only. Note: It is best practice to use a class name to change the value of a class variable.