python get() 和getattr()
时间: 2023-11-26 22:04:38 浏览: 25
python中get()和getattr()都是用来获取对象属性的方法,但是它们的使用场景不同。
get()方法是字典的方法,用于获取字典中指定键的值,如果键不存在则返回默认值(如果有设置的话)或者None。
例如:
```
my_dict = {'name': 'Alice', 'age': 25}
print(my_dict.get('name')) # 输出:Alice
print(my_dict.get('gender')) # 输出:None
print(my_dict.get('gender', 'unknown')) # 输出:unknown
```
getattr()方法是用于获取对象的属性值,如果属性不存在则会抛出AttributeError异常。
例如:
```
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person('Alice', 25)
print(getattr(person, 'name')) # 输出:Alice
print(getattr(person, 'gender')) # 抛出AttributeError异常
print(getattr(person, 'gender', 'unknown')) # 输出:unknown
```
可以看出,get()适用于字典类型的对象,而getattr()适用于任何类型的对象。
相关问题
python __getattr__和__get__
`__getattr__`和`__getattribute__`是Python中特殊的方法,用于处理对象的属性访问和获取。
`__getattr__`用于在对象实例的属性不存在时被调用,通常在动态获取属性的情况下使用。当我们尝试访问一个对象上不存在的属性时,Python解释器会自动调用`__getattr__`方法。我们可以在这个方法中定义对不存在属性的处理逻辑,比如返回默认值或者触发异常。
下面是一个示例:
```
class MyClass:
def __getattr__(self, name):
return f"Attribute {name} does not exist."
obj = MyClass()
print(obj.some_attr)
# Output: Attribute some_attr does not exist.
```
`__getattribute__`用于在对象实例的属性被访问时被调用。与`__getattr__`不同,`__getattribute__`会在所有属性访问上被调用,无论属性是否存在。我们可以通过在`__getattribute__`方法中自定义属性访问的行为,比如在访问属性前执行一些操作或返回特定的值。
下面是一个示例:
```
class MyClass:
def __getattribute__(self, name):
print(f"Accessing attribute {name}")
return super().__getattribute__(name)
obj = MyClass()
print(obj.some_attr)
# Output:
# Accessing attribute some_attr
# None
```
注意,使用`__getattribute__`时需要谨慎,因为在方法内部访问同个实例的其他属性时可能会触发无限递归调用。在这种情况下,可以通过使用`super()`来避免无限递归。
综上所述,`__getattr__`和`__getattribute__`是Python中用于处理对象属性访问和获取的特殊方法,分别用于处理不存在属性和所有属性的访问。
getattr 和get
`getattr` 和 `get` 是 Python 中的两个内置函数,用于获取对象的属性或元素。
`getattr(object, name[, default])` 函数用于获取对象的属性值。它接受三个参数:`object` 是要获取属性的对象,`name` 是属性的名称,`default` 是一个可选参数,表示当属性不存在时返回的默认值。如果属性不存在且没有提供默认值,则会引发 `AttributeError` 异常。
例如:
```python
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Alice", 25)
name = getattr(person, "name")
print(name) # 输出: Alice
city = getattr(person, "city", "Unknown")
print(city) # 输出: Unknown,因为属性 "city" 不存在,默认返回了 "Unknown"
```
`get` 是字典(`dict`)对象的方法,用于获取指定键的值。它接受两个参数:第一个参数是要获取值的键,第二个参数是可选参数,表示当键不存在时返回的默认值。如果没有提供默认值,则会返回 `None`。
例如:
```python
person = {"name": "Alice", "age": 25}
name = person.get("name")
print(name) # 输出: Alice
city = person.get("city", "Unknown")
print(city) # 输出: Unknown,因为键 "city" 不存在,默认返回了 "Unknown"
```
需要注意的是,`getattr` 适用于获取对象的属性值,而 `get` 适用于获取字典的键值。