Python 属性和属性之间有什么区别

Python 属性和属性之间有什么区别

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

属性 是一种特殊类型的属性,它具有getter、setter和delete方法,例如__get____set____delete__方法。

Python中的属性装饰器为属性提供getter/setter访问。您可以使用property函数定义getter、setter和删除方法。如果您只想要只读属性,还可以在方法上方添加@property装饰器。

# create a class
class C(object):     
   # constructor
   def __init__(self, x): 
      self._x = x 

   # getting the values
   @property              
   def x(self): 
   #I'm the 'x' property.
      print('Getting x') 
      return self._x 
   # C._x is a property. This is the getter method       
   # setting the values     
   @x.setter  #This is a setter method 
   def x(self, x): 
      print('Setting value to ' + x) 
      self._x = x 


   # deleting the values 
   @x.deleter 
   def x(self): 
      print('Deleting x') 
      del self._x 
# create an object of class
y = C('Happy Holidays') 
print(y.x) 
#setting the value    
y.x = 'Merry Christmas!'

# deleting the value
del y.x

输出

Getting x
Happy Holidays
Setting value to Merry Christmas!
Deleting x

在Python中,对象既有属性(attribute)又有特性(property)。这两个概念可能会让人感到混淆,因为它们之间有关联但并非完全相同的东西。

属性

属性是属于对象的变量。它们可以使用点号标记法(dot notation)进行访问,并且通常在对象的类定义内部进行定义。

示例

在这个示例中,我们定义了一个名为Dog的类,它有两个属性:nameage。接下来,我们创建了一个名为my_dogDog对象,并将其name属性设置为”Fido”、age属性设置为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的属性,它根据正方形的边长计算出正方形的面积。我们创建一个边长为5的Square对象,打印其面积为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_rateacct1这个BankAccount对象的属性。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

在这个示例中,nameageperson1person2Person对象的属性。is_minoris_adult是根据他们的年龄判断人是否为未成年人或成年人的属性。这两个属性都使用@property装饰器定义,并可以使用点表示法访问。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程