Hướng dẫn python override setter - python override setter

Tôi muốn ghi đè cả getter và setter của một thuộc tính trong một lớp con. Hãy xem xét đoạn mã Python3 sau đây:

class Base():
    @property
    def value(self):
        return "Base.value"

    @value.setter
    def value(self, value):
        pass

class Child(Base):
    @Base.value.getter
    def value(self):
        return "Child.value"

    @Base.value.setter
    def value(self, value):
        pass

c = Child()
print(c.value)

Chương trình này in Base.value, có nghĩa là getter value không bị ghi đè. Tuy nhiên, nếu tôi xóa bộ setter value trong lớp Child, chương trình sẽ in Child.value, điều đó có nghĩa là getter bị ghi đè.

Điều gì là sai với cách ghi đè thuộc tính này? Tại sao việc sửa đổi setter thay đổi hành vi của getter? Và làm thế nào tôi có thể ghi đè chính xác cả getter và setter trong lớp con?

Khi được hỏi ngày 29 tháng 5 năm 2018 lúc 12:08May 29, 2018 at 12:08

Hướng dẫn python override setter - python override setter

3

Từ những quan sát của tôi, tôi nghĩ rằng bạn phải sử dụng công cụ trang trí @base.value.setter (hoặc .getter) nếu chỉ cần thiết lập máy setter (hoặc getter).

Nếu bạn phải ghi đè cả hai, chỉ cần sử dụng phương pháp @Property thông thường.

class Base():
    def __init__(self):
        self._value = 'Value'

    @property
    def value(self):
        print('Base.Getter')
        return f'Base.{self._value}'

    @value.setter
    def value(self, value):
        print('Base.Setter')
        self._value = value

class Child(Base):
    @property
    #@Base.value.getter
    def value(self):
        print('Child.Getter')
        return f'Child.{self._value}'

    @value.setter
    #@Base.value.setter
    def value(self, value):
        print('Child.Setter')
        self._value = value

b, c = Base(), Child()
print(b.value)
print(c.value)
b.value = 'test.base'
c.value = 'test.child'
print(b.value)
print(c.value)

Bản in:

Base.Getter
Base.Value
Child.Getter
Child.Value
Base.Setter
Child.Setter
Base.Getter
Base.test.base
Child.Getter
Child.test.child

Đã trả lời ngày 29 tháng 5 năm 2018 lúc 12:49May 29, 2018 at 12:49

Hướng dẫn python override setter - python override setter

1

Hướng dẫn python override setter - python override setter

Hướng dẫn fit sum of gaussians python - tổng hợp của trăn gaussians

import numpy as np import matplotlib.pyplot as plt import scipy.stats import scipy.optimize data = np.array([-69,3, -68, 2, -67, 1, -66, 1, -60, 1, -59, 1, -58, 1, -57, 2, -56, 1, ...

Hướng dẫn python override setter - python override setter

Hướng dẫn dùng item. python

Kiểu dữ liệu Dictionary trong Python là một tập hợp các cặp key-value không có thứ tự, có thể thay đổi và lập chỉ mục (truy cập phần tử theo chỉ mục). ...

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Lấy số nguyên trong python

Hướng dẫn cách kiểm tra số nguyên trong python. Bạn sẽ học được cách sử dụng các hàm sẵn có cũng như cách tạo một hàm cơ bản để kiểm tra số nguyên ...

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn dùng matplotlib figure python

Bài viết được sự cho phép của tác giả Kien Dang ChungNội dung chínhPylab là gì?1. Phân cấp đối tượng trong Matplotlib2. Vẽ đồ thị với plot()2.2 Vẽ nhiều ...

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Code trí tuệ nhân tạo python

Trang chủ AILập trình AI bằng PythonLập trình AI bằng PythonĐăng bởi: AdminLượt xem: 13437Số bài học: 0 Chuyên mục: AICác khóa học khác Học Bootstrap 4Số bài ...

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn oop python github - oop python github

python_ooplink 1 https://o7planning.org/vi/11415/lop-va-doi-tuong-trong-pythonlink 2 https://phocode.com/python/python-huong-doi-tuong-trong-python/Một số khái niệmClass: là một kiểu dữ ...

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn dùng median mode python

Module statistics trong Python cung cấp các hàm để thống kê toán học của dữ liệu số. Có một số hàm thống kê phổ biến được định nghĩa trong Module này. Nội ...

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter

Hướng dẫn python override setter - python override setter