Python中属性和属性有什么区别?

Python中属性和属性有什么区别?

在Python中,一切都是对象,每个对象都有属性和方法或函数。属性由数据变量表示,例如姓名、年龄、身高等。

属性 是一种特殊的属性,具有getter、setter和delete方法,如getsetdelete方法。

在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的类,它有两个属性:balanceinterest_rate。 我们还定义了一个名为interest_earned的属性,根据账户余额和利率计算账户上获得的利息金额。 我们创建了一个名为acct1BankAccount对象,其余额为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

在此示例中,balanceinterest_rateBankAccount对象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

在此示例中,widthheightRectangle对象rect的属性。 areaperimeter是根据矩形属性计算矩形面积和周长的属性。 这两个属性都使用@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

在此示例中,nameagePerson对象person1person2的属性。 is_minoris_adult是基于年龄检查该人是未成年人还是成年人的属性。 这两个属性都使用@property装饰器定义,并可以使用点表示法访问。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程