请指出我的代码中的错误。
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__()
?
它们是实例方法。您必须首先创建
Foo
的实例:
f = Foo()
f.set(10)
f.get() # Returns 10
如何使用
?__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
要在 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 课程