在定义类(class)的时候发现属性这个地方有很多坑,类属性、实例属性、局部变量傻傻分不清。
在在本文中介绍以下内容(全部跟定义类有关)
- 类属性
- 实例属性
一. 类属性:定义类的模块添加的属性
1. 调用:
在内部用类名.类属性名调用,
外部既可以用类名.类属性名又可以用实例化对象.类属性名来调用
demo1
class
Car
(
)
:
type
=
"new"
my_car
=
Car
(
)
print
(
my_car
.
type
)
### 实例对象.类属性名调用
print
(
Car
.
type
)
### 类名.类属性名调用
输出结果:
new
new
2. 修改:通过类名.类属性修改,在全局任何地方都可以修改
demo2
class
Car
(
)
:
type
=
"new"
Car
.
type
=
"newnew"
my_car
=
Car
(
)
print
(
Car
.
type
)
print
(
my_car
.
type
)
输出结果:
newnew
newnew
###通过输出结果可以看出修改成功了
二、实例属性:类内所有方法可调用(标志:self.属性名)
- 在__init__(self,…)中初始化的属性,self.属性名
-
在类中的其他方法中定义的self.属性名
因为__init__函数比较特殊,所以单拿出来讲,关于__init__方法:
这两种情况会在demo中一一举例
要点:以self为前缀的变量都可以供类中的所有方法使用
外部调用时用实例对象.属性名
demo
class
Car
(
)
:
type
=
"new"
###类属性
def
__init__
(
self
,
make
,
year
)
:
self
.
make
=
make
self
.
year
=
year
### make,year在实例化对象的时候必须传入相应参数 必需实例属性
self
.
length
=
2000
### 由于__init__方法定义的时候没有wo,所以在实例化对象的时候无需传入 非必需属性
def
get_name
(
self
)
:
long_name
=
self
.
year
+
' '
+
self
.
make
+
" "
print
(
long_name
,
self
.
length
)
my_car
=
Car
(
'aodi'
,
'2010'
)
my_car
.
get_name
(
)
输出结果:
2010
aodi
2000
从上面的注释中可以看出有两种实例属性,一种是必需实例属性(如demo中的make,year,它们是在__init__方法中定义的时候定义的,在实例化对象的时候必须传入),一些是非必需实例属性如(length,当然后面的方法也可以调用它,但在实例化对象的时候无需传入)。