Python中属性和属性有什么区别?
在Python中,一切都是对象,每个对象都有属性和方法或函数。属性由数据变量表示,例如姓名、年龄、身高等。
属性 是一种特殊的属性,具有getter、setter和delete方法,如get、set和delete方法。
在Python中,属性装饰器提供了对属性的getter/setter访问。您可以使用property函数定义getter、setter和delete方法。如果您只想阅读属性,还可以在方法上方添加@property装饰器。
#创建一个类
class C(object):
# 构造函数
def __init__(self, x):
self._x = x
# 获取值
@property
def x(self):
#我是“ x”属性。
print('获取x')
return self._x
#C._x是一个属性。 这是getter方法
# 设置值
@x.setter #这是setter方法
def x(self, x):
print('将值设置为'+ x)
self._x = x
# 删除值
@x.deleter
def x(self):
print('删除x')
del self._x
# 创建类的对象
y = C('祝节日快乐')
print(y.x)
#设置值
y.x = '圣诞快乐!'
# 删除值
del y.x
输出
获取x
祝节日快乐
将值设置为圣诞快乐!
删除x
在Python中,对象既有属性又具有属性。这两个概念可能令人困惑,因为它们相关但并不完全相同。
属性
属性是属于对象的变量。它们可以使用点符号访问,通常在对象的类定义中定义。
例子
在此示例中,我们定义了一个名为”Dog”的类,其中有两个属性:”name”和”age”。然后,我们创建一个名为”my_dog”的”Dog”对象,并将其”名称”和”age”属性分别设置为”Fido”和3。最后,我们打印“ name”属性的值,它是“ Fido”。
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
my_dog = Dog("Fido", 3)
print(my_dog.name)
输出
Fido
属性
另一方面,属性是用于访问或修改属性值的方法。它们使用@property装饰器定义,可以将其视为“ getter”方法。
例子
在此示例中,我们定义了一个名为”Square”的类,其中只有一个名为”side”的属性。我们还定义了一个名为”area”的属性,它根据正方形的边长计算正方形的面积。我们创建一个名为”my_square”的Square对象,其边长为5,并打印其面积,即25。
class Square:
def __init__(self, side):
self.side = side
@property
def area(self):
return self.side ** 2
my_square = Square(5)
print(my_square.area)
输出
25
需要注意的是属性和属性不同,因为它们是用于访问或修改属性的方法。在上面的示例中,“area”不是“my_square”的属性,而是根据“side”属性计算值的属性。
在Python中的属性与属性
让我们看一些更多的代码示例,以更好地理解属性和属性之间的区别。
例子:属性与属性的例子
在该示例中,我们定义了一个名为BankAccount
的类,它有两个属性:balance
和interest_rate
。 我们还定义了一个名为interest_earned
的属性,根据账户余额和利率计算账户上获得的利息金额。 我们创建了一个名为acct1
的BankAccount
对象,其余额为1000,利率为0.05,然后使用点表示法打印其余额和获得的利息。
class BankAccount:
def __init__(self, balance, interest_rate):
self.balance = balance
self.interest_rate = interest_rate
@property
def interest_earned(self):
return self.balance * self.interest_rate
acct1 = BankAccount(1000, 0.05)
print(acct1.balance)
print(acct1.interest_earned)
输出
1000
50.0
在此示例中,balance
和interest_rate
是 BankAccount
对象acct1
的属性。 interest_earned
是一个基于该对象属性计算值的属性。 它使用@property
装饰器定义,并可以使用点表示法访问。
总体而言,Python中属性和属性的区别在于:属性只是一个对象的数据成员,而属性是一些方法,像属性一样访问,但实际上在调用时执行一些计算。
示例
下面是一个示例,演示表示矩形的类中属性和属性的用法−
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
return self.width * self.height
@property
def perimeter(self):
return 2 * (self.width + self.height)
rect = Rectangle(5, 3)
print(rect.width)
print(rect.height)
print(rect.area)
print(rect.perimeter)
输出
5
3
15
16
在此示例中,width
和height
是Rectangle
对象rect
的属性。 area
和perimeter
是根据矩形属性计算矩形面积和周长的属性。 这两个属性都使用@property
装饰器定义,并可以使用点表示法访问。
示例
下面是另一个示例,演示表示人的类中属性和属性的用法−
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
@property
def is_minor(self):
return self.age < 18
@property
def is_adult(self):
return self.age >= 18
person1 = Person("Alice", 23)
person2 = Person("Bob", 16)
print(person1.name)
print(person1.age)
print(person1.is_minor)
print(person1.is_adult)
print(person2.name)
print(person2.age)
print(person2.is_minor)
print(person2.is_adult)
输出
Alice
23
False
True
Bob
16
True
False
在此示例中,name
和age
是 Person
对象person1
和person2
的属性。 is_minor
和is_adult
是基于年龄检查该人是未成年人还是成年人的属性。 这两个属性都使用@property
装饰器定义,并可以使用点表示法访问。