如何使用get/set方法?

问题描述 投票:0回答:3

请指出我的代码中的错误。

class Foo:
    def get(self):
        return self.a

    def set(self, a):
        self.a = a

Foo.set(10)
Foo.get()

类型错误:set() 恰好需要 2 个位置参数(给定 1 个)

如何使用

__get__()
/
__set__()

python getter-setter
3个回答
4
投票

它们是实例方法。您必须首先创建

Foo
的实例:

f = Foo()
f.set(10)
f.get()    # Returns 10

4
投票

如何使用

__get__()/__set__()

如果你有Python3,就这样。 Python2.6 中的描述符不想对我正常工作。

Python v2.6.6

>>> class Foo(object):
...     def __get__(*args): print 'get'
...     def __set__(*args): print 'set'
...
>>> class Bar:
...     foobar = Foo()
...
>>> x = Bar()
>>> x.foobar
get
>>> x.foobar = 2
>>> x.foobar
2

Python v3.2.2

>>> class Foo(object):
...     def __get__(*args): print('get')
...     def __set__(*args): print('set')
...
>>> class Bar:
...     foobar = Foo()
...
>>> x = Bar()
>>> x.foobar
get
>>> x.foobar = 2
set
>>> x.foobar
get

0
投票

要在 Python 中使用 get/set 方法,通常需要创建类方法来获取(访问)或设置(修改)对象的属性或特性。以下是如何在 Python 类中实现 get 和 set 方法的基本示例:

class Person:
    def __init__(self, name, age):
        self._name = name  # Private attribute with a leading underscore
        self._age = age    # Private attribute with a leading underscore

    # Getters (accessors)
    def get_name(self):
        return self._name

    def get_age(self):
        return self._age

    # Setters (mutators)
    def set_name(self, name):
        self._name = name

    def set_age(self, age):
        if age >= 0:
            self._age = age
        else:
            print("Age cannot be negative.")

# Create an instance of the Person class
person = Person("Alice", 30)

# Using the get methods
print("Name:", person.get_name())  # Output: Name: Alice
print("Age:", person.get_age())    # Output: Age: 30

# Using the set methods
person.set_name("Bob")
person.set_age(25)
print("Name:", person.get_name())  # Output: Name: Bob
print("Age:", person.get_age())    # Output: Age: 25

# Attempt to set a negative age
person.set_age(-5)  # Output: Age cannot be negative.

在此示例中:

我们创建一个具有私有属性 _name 和 _age 的 Person 类。按照惯例,带有前导下划线的属性在 Python 中被认为是私有的,尽管如果需要的话仍然可以直接访问它们。

我们定义 getter 方法(访问器)get_name 和 get_age 来检索 _name 和 _age 的值。

我们定义setter方法(mutators)set_name和set_age来修改_name和_age的值。在 set_age 方法中,我们包含一个检查以确保年龄为非负数。

我们创建 Person 类的实例,并演示如何使用 get 和 set 方法来访问和修改对象的属性。

使用 get/set 方法是 Python 中封装类属性并提供对它们的受控访问的常见做法,允许您在获取或设置值时添加验证或执行其他操作。 浦那最好的 Python 课程

© www.soinside.com 2019 - 2024. All rights reserved.