Python类属性与实例属性用法分析
在 Python 中,类属性和实例属性是面向对象编程中常用的概念。他们有着不同的用法和作用,下面将详细讲解类属性与实例属性的用法分析。
1. 类属性
类属性是属于类的属性,它没有被任何实例化对象所共有,而是为类本身所有,并在定义类时声明。即使没有通过类实例化对象,该属性也可以直接通过类名来访问。
1.1 类属性的定义和访问
类属性的定义需要在类定义中进行,直接在类定义中定义一个变量即可,这个变量即为类属性。举个例子:
class Person:
count = 0
以上代码定义了一个类 Person
并定义了一个类属性 count
,初始值为 0
。
要访问类属性需要使用类名,语法如下:
类名.属性名
如:
Person.count
1.2. 类属性的方法内和方法外的访问方式
- 方法内,使用
self.属性名
或者类名.属性名
class Person:
count = 0
def __init__(self, name, age):
self.name = name
self.age = age
Person.count += 1 #通过类名来访问类属性 count
# self.count += 1 #通过 self 访问类属性 count,但不建议这么做
def get_info(self):
print(f'{self.name} is {self.age} years old.')
在 __init__
方法内,使用 Person.count += 1
的方式来访问类属性 count
,其实通过 self.count += 1
也是可以访问的,但这样并不推荐,因为这会使 count
变成一个实例属性。方法外部,同样可以用类名来访问类属性。
1.3. 应用场景
类属性的应用场景非常广泛,常被用于定义和表达类本身的特征,如类的名称、变量名称、实例数量等。如上面的例子中,类属性 count
定义了当前类 Person
的实例数量。
1.4. 示例
假设有一个学校,学校里有很多班级和学生,我们可以通过类属性来定义学校、班级和学生的数量,示例代码如下:
class School:
name = '高新职业中专'
class_count = 10 # 班级数量
st_count = 300 # 学生数量
def get_info(self):
print(f'{School.name}共有{School.class_count}个班级和{School.st_count}名学生。')
school = School()
school.get_info()
以上代码定义了一个名为 School
的类,并定义了三个类属性分别包括学校名称、班级数量和学生数量。在 get_info
方法中,通过类名访问了这些类属性,最终输出了学校的信息。
2. 实例属性
与类属性不同,实例属性是属于类的实例化对象的,也就是说,每个实例化对象都有一份,互相之间并没有任何关联。实例属性必须在类的方法内被声明,并且是通过 self
对象来实现声明,并通过 self.
对象来访问。
2.1. 实例属性的定义和访问
实例属性的定义只能在方法内进行声明,如:
class Person:
def __init__(self, name, age):
self.name = name # 类的实例化对象拥有的实例属性 name ,赋值为调用传入的 name
self.age = age # 类的实例化对象拥有的实例属性 age,赋值为调用传入的 age
在 __init__
方法中定义了两个实例属性 self.name
和 self.age
,这两个实例属性只能在类的实例化对象中被使用。
在创建类的实例化对象时也仍旧需要使用类中定义的方法,并传入参数,像这样:
person_1 = Person('张三', 18)
创建 Person
类的实例化对象 person_1
,并传入 name
和 age
,这样实例化对象即拥有 name
和 age
两个实例属性。
2.2. 实例属性的方法内和方法外的访问方式
在方法内部,实例属性通过 self.属性名
来访问,比如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def get_info(self):
print(f'{self.name} is {self.age} years old.')
在 get_info
方法里,可以通过 self.name
和 self.age
来访问实例属性。
在类的外部,同样需要使用类的实例化对象来访问实例属性,例如:
person_1 = Person('张三', 18)
print(person_1.name, person_1.age)
在这个例子中,我们通过定义方法传入了两个参数 name
和 age
,并且通过这两个参数来创建了一个实例化对象 person_1
,最后通过访问这个实例化对象的 name
和 age
实例属性,来获取实例化对象的信息。
2.3. 应用场景
实例属性的应用场景非常广泛,相比较类属性而言,它更加灵活。实例属性可以根据具体的情况,为不同的实例化对象进行定制和设置专属的属性和方法,方便灵活,适用于强调灵活度的应用。
2.4. 示例
以下是一个汽车销售类的示例代码,其中汽车的名称、价格、款式都是实例属性:
class Car:
def __init__(self, name, price, style):
self.name = name
self.price = price
self.style = style
def get_info(self):
print(f'这辆汽车是{self.name},是一辆{self.style},价格是{self.price}元。')
car_1 = Car('奔驰S600', 800000, '豪华轿车')
car_1.get_info() # 这辆汽车是奔驰S600,是一辆豪华轿车,价格是800000元。
总结
类属性和实例属性是 Python 中的重要概念,它们各自有不同的使用场景和使用方法,对于一个 Python 程序员而言,理解这两个概念尤为重要。在编写 Python 类的时候,我们可以根据具体场景来选择使用类属性还是实例属性,从而让我们的代码更加简洁、明了、灵活。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python类属性与实例属性用法分析 - Python技术站